सबसे छोटा संभव वैध पीडीएफ क्या है?


139

सरल जिज्ञासा में से, सबसे छोटी जीआईएफ को देखा , सबसे छोटी संभव वैध पीडीएफ फाइल क्या है?


निर्भर करता है कि आप इसे कैसे बनाते हैं। संभावना है कि आप अपने आप को (एक संपादक में) एक छोटे से लिखने में सक्षम होंगे कि कोई एप्लिकेशन क्या उत्पन्न करेगा।
देवनुल

भूत दिखाने या ps2pdf को "शोपेज" (w / o उद्धरण) खिलाने की कोशिश करें।
देवनाउल

जवाबों:


194

यह एक दिलचस्प समस्या है। पुस्तक द्वारा इसे लेते हुए, आप इसकी शुरुआत कर सकते हैं:

%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 बाइट्स तक बढ़ जाता है, इसमें से अधिकांश वैकल्पिक मेटाडाटा है, लेकिन यह कई स्पष्ट उल्लंघन के पीछे छोड़ देता है।


25
यह भी पता चला है कि जब कल्पना कहती है "अप्रत्यक्ष संदर्भ होगा" और / काउंट की आवश्यकता होती है, और हेडर को "% PDF-1.0" होना चाहिए, वे ढीले सुझाव दे रहे हैं। नहीं, वे ढीले सुझाव नहीं हैं, वे वैधता के लिए आवश्यकताएं हैं। यहां तक ​​कि अगर कुछ पीडीएफ दर्शक उन्हें लागू नहीं करते हैं, तो उनका पालन न करना अमान्यता का अर्थ है, और ओपी ने एक वैध पीडीएफ के लिए कहा।
22

23
स्वीकार किए जाते हैं क्योंकि उत्तर के साथ शुरू होता है minimum allowed by the specऔर फिर ऊपर और परे चला जाता है। शानदार जवाब, धन्यवाद! :)
मेशी

बहुत अच्छा जवाब। अब, इसमें पाठ की एक पंक्ति के साथ सबसे छोटे वैध पीडीएफ के बारे में कैसे, जैसे "हैलो वर्ल्ड"। मुझे लगा कि {स्ट्रीम बीटी ("हैलो वर्ल्ड") ईटी एंडस्ट्रीम} को जोड़ना उतना ही सरल होगा लेकिन अभी तक एक्रोबेट को खुश नहीं किया जा सका।
नियॉनजॉन

1
यही युक्ति है। पीडीएफ में वस्तुओं के ग्राफ में चक्र होते हैं।
कुर्सी

1
@towi आपका बेस 64-एन्कोडेड संस्करण इसमें \nएम्बेडेड हो गया है, और जब बेस 64-डिकोडेड सही फ़ाइल सामग्री नहीं देता है।
क्रिस्टोफर शुल्त्स

19

मुझे खोलने के लिए हैलो वर्ल्ड का उदाहरण नहीं मिला।

पाठ सामग्री वाली एक छोटी-ईश फ़ाइल के लिए:

%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

2
यह काम नहीं करेगा, आपको टेक्स्ट दिखाने के लिए एक फॉन्ट रिसोर्स को परिभाषित करना होगा और उसे पेज कंटेंट के अंदर चुनना होगा।
२०

2
यह फ़ाइल वास्तव में Mac OS X El Capitan के अंतर्गत खुलती है जबकि PDF1.0 के साथ सबसे अधिक मूल्यांकन किया गया उत्तर नहीं था।
देवी

12
इसके अलावा क्रोम, डेटा के तहत खोलता है: आवेदन / पीडीएफ; बेस 64, JVBERi0xLjIgCjkgMCBvYmoKPDwKPj4Kc3RyZWFtCkJULyA5IFRmKFRlc3QpJyBFVAplbmRzdHJlYW0KZW5kb2JqCjQgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL1BhcmVudCA1IDAgUgovQ29udGVudHMgOSAwIFIKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL0tpZHMgWzQgMCBSIF0KL0NvdW50IDEKL1R5cGUgL1BhZ2VzCi9NZWRpYUJveCBbIDAgMCA5OSA5IF0KPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1BhZ2VzIDUgMCBSCi9UeXBlIC9DYXRhbG9nCj4 + CmVuZG9iagp0cmFpbGVyCjw8Ci9Sb290IDMgMCBSCj4 + CiUlRU9G
ल्यूक Rehmann

8

मैंने सोचा था कि मैं "हैलो वर्ल्ड" प्रदर्शित करने वाला एक छोटा पीडीएफ बनाऊंगा। पाठ निचले बाएँ कोने में है। 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

2
बहुत छोटा। ;) मान्य नहीं है, हालांकि, कल्पना के अनुसार।
मकल

8
मेरे लिए क्रोम में नहीं खुलेगा।
ल्यूक रहमान

0

जावा में, इसका उपयोग करें:

 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;
}

ओपी ने सबसे छोटी संभव वैध पीडीएफ फाइल मांगी ; आपकी कल्पना के अनुसार मान्य नहीं है।
mkl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.