सरल जिज्ञासा में से, सबसे छोटी जीआईएफ को देखा , सबसे छोटी संभव वैध पीडीएफ फाइल क्या है?
सरल जिज्ञासा में से, सबसे छोटी जीआईएफ को देखा , सबसे छोटी संभव वैध पीडीएफ फाइल क्या है?
जवाबों:
यह एक दिलचस्प समस्या है। पुस्तक द्वारा इसे लेते हुए, आप इसकी शुरुआत कर सकते हैं:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
xref
0 4
0000000000 65535 f
0000000010 00000 n
0000000053 00000 n
0000000102 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
149
%EOF
जो पीडीएफ खुशी के 291 बाइट्स है। एक्रोबैट इसे खोलता है, लेकिन यह कुछ हद तक शिकायत करता है। इसमें एक पृष्ठ है और यह 3/72 "वर्ग है, न्यूनतम जिसे ऐनक द्वारा अनुमति दी गई है।
हालांकि, एक्रोबैट एक्स अब क्रॉस रेफरेंस टेबल के साथ भी परेशान नहीं करता है, इसलिए हम इसे बाहर निकाल सकते हैं:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Size 4/Root 1 0 R>>
एक्रोबेट शिकायत करता है, लेकिन इसे खोलता है। अब हम 178 बाइट पर हैं। पता चलता है कि आपको ट्रेलर में उस / आकार की आवश्यकता नहीं है। अब हम 172 पर हैं:
%PDF-1.0
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>
यह पता चलता है कि आपको अपने शब्दकोशों में उन सभी pesky / प्रकार तत्वों की आवश्यकता नहीं है:
%PDF-1.0
1 0 obj<</Pages 2 0 R>>endobj 2 0 obj<</Kids[3 0 R]/Count 1>>endobj 3 0 obj<</MediaBox[0 0 3 3]>>endobj
trailer<</Root 1 0 R>>
अब हम 138 बाइट पर हैं।
यह भी पता चला है कि जब कल्पना कहती है "अप्रत्यक्ष संदर्भ होगा" और / गणना की आवश्यकता होती है, और हेडर "%" होना चाहिए PDF-1.0, वे ढीले सुझाव दे रहे हैं। यह सबसे छोटा है जिसे मैं इसे बना सकता हूं और यह एक्रोबैट एक्स में खुला है:
%PDF-1.
trailer<</Root<</Pages<</Kids[<</MediaBox[0 0 3 3]>>]>>>>>>
70 बाइट्स।
अब, मेरा संपादक विंडोज न्यूलाइन अनुशासन का उपयोग करता है, लेकिन एक्रोबेट विंडोज, मैक या यूनिक्स सम्मेलनों को स्वीकार करता है, इसलिए हेक्स एडिटर का उपयोग करके, मैंने \ r \ n को \ r के साथ बदल दिया और अंतिम न्यूलाइन को हटा दिया, जो 67 बाइट्स के साथ छोड़ देता है
25 50 44 46 2D 31 2E 0D 74 72 61 69 6C 65 72 3C
3C 2F 52 6F 6F 74 3C 3C 2F 50 61 67 65 73 3C 3C
2F 4B 69 64 73 5B 3C 3C 2F 4D 65 64 69 61 42 6F
78 5B 30 20 30 20 33 20 33 5D 3E 3E 5D 3E 3E 3E
3E 3E 3E
मैंने अंतिम अंतिम शब्दकोश (>>) उतारने की कोशिश की, लेकिन एक्रोबेट ऐसा नहीं होगा। Google Chrome (FoxIt) में अंतर्निहित PDF रीडिंग इसे नहीं खोलेगी।
पोस्टस्क्रिप्ट (हा! मैंने वहां क्या किया? देखें) के रूप में, यदि आप एक्रोबैट को फ़ाइल को "रिपेयर" करने की सहमति देते हैं, तो यह 3550 बाइट्स तक बढ़ जाता है, इसमें से अधिकांश वैकल्पिक मेटाडाटा है, लेकिन यह कई स्पष्ट उल्लंघन के पीछे छोड़ देता है।
minimum allowed by the spec
और फिर ऊपर और परे चला जाता है। शानदार जवाब, धन्यवाद! :)
\n
एम्बेडेड हो गया है, और जब बेस 64-डिकोडेड सही फ़ाइल सामग्री नहीं देता है।
मुझे खोलने के लिए हैलो वर्ल्ड का उदाहरण नहीं मिला।
पाठ सामग्री वाली एक छोटी-ईश फ़ाइल के लिए:
%PDF-1.2
9 0 obj
<<
>>
stream
BT/ 9 Tf(Test)' ET
endstream
endobj
4 0 obj
<<
/Type /Page
/Parent 5 0 R
/Contents 9 0 R
>>
endobj
5 0 obj
<<
/Kids [4 0 R ]
/Count 1
/Type /Pages
/MediaBox [ 0 0 99 9 ]
>>
endobj
3 0 obj
<<
/Pages 5 0 R
/Type /Catalog
>>
endobj
trailer
<<
/Root 3 0 R
>>
%%EOF
मैंने सोचा था कि मैं "हैलो वर्ल्ड" प्रदर्शित करने वाला एक छोटा पीडीएफ बनाऊंगा। पाठ निचले बाएँ कोने में है। 9-बिंदु फ़ॉन्ट के बारे में क्षमा करें, किसी भी बड़े को एक अतिरिक्त बाइट खर्च करना होगा :)
एडोब रीडर एक्स के लिए 172 बाइट्स (यदि लाइनफीड-केवल नईलाइनों के साथ सहेजा गया है और कोई अनुगामी न्यूलाइन या नल-बाइट नहीं है):
%PDF-1.
1 0 obj<</Kids[<</Parent 1 0 R/Resources<<>>/Contents 2 0 R>>]>>endobj 2 0 obj<<>>stream
BT/ 9 Tf(Hello World)' ET
endstream
endobj trailer<</Root<</Pages 1 0 R>>>>
क्रोम के बिल्ड पीडीएफ दर्शक के लिए 120 बाइट्स:
%PDF 1 0 obj<</Pages<</Kids[<</Contents<<>>stream
BT 9 Tf(Hello World)' ET endstream>>]>>>>endobj trailer<</Root 1 0 R>>
क्रोम में इसे आसानी से देखने के लिए, इस URI को एड्रेस बार में पेस्ट करें (SO मुझे लिंक नहीं करने देगा, और यह अन्य ब्राउज़रों में बिल्कुल काम नहीं करेगा):
data:application/pdf,%25PDF%201%200%20obj%3C%3C%2FPages%3C%3C%2FKids%5B%3C%3C%2FContents%3C%3C%3E%3Estream%0ABT%209%20Tf(Hello%20World)'%20ET%20endstream%3E%3E%5D%3E%3E%3E%3Eendobj%20trailer%3C%3C%2FRoot%201%200%20R%3E%3E
जावा में, इसका उपयोग करें:
private static String samplepdf = "255044462D312E0D747261696C65723C3C2F526F6F743C3C2F50616765733C3C2F4B6964735B3C3C2F4D65646961426F785B302030203320335D3E3E5D3E3E3E3E3E3E";
और फिर
byte[] bytes = hexStringToByteArray(samplepdf);
...
public byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i + 1), 16));
}
return data;
}