जर्मनी से भी बड़ा PDF बनाना
(alexwlchan.net)- इंटरनेट पर फैला “PDF का अधिकतम आकार 381km × 381km” PDF format की अपनी सीमा नहीं है, बल्कि Adobe Acrobat 7.0 की implementation limit से निकला मान है
- PDF 1.6 से
/UserUnitके ज़रिए basic unit 1/72 inch को बड़ा किया जा सकता है, और Acrobat 7.0 का maximum value75,00015,000,000 inchकी ऊपरी सीमा बनाता है - हाथ से बनाया गया PDF
%PDF-1.6, object list,xref,trailer,startxref,%%EOFसे बना होता है, और page size/MediaBoxऔर/UserUnitके combination से तय होता है - Acrobat
/MediaBox14,400 या/UserUnit75,000 से ऊपर होने पर भी 15,000,000 inch दिखाता है, और/UserUnitसे ज़्यादा value को बिना warning के ignore कर देता है - macOS Preview.app
/UserUnitको ignore करता है, लेकिन/MediaBoxपर Acrobat जैसी upper limit नहीं लगाता, इसलिए ब्रह्मांड से भी बड़ा PDF जैसा दिखने वाली file भी बनाई जा सकती है
381km की सीमा कहाँ से आई
- PDF document का अधिकतम आकार 381km × 381km होने का दावा लंबे समय से इंटरनेट पर बार-बार फैलता रहा है
- यह संख्या PDF format की सीमा नहीं, बल्कि Adobe Acrobat की implementation limit से आई है
- PDF 1.7 specification के अनुसार page size limit इस तरह समझी जाती है
- PDF 1.6 से पहले default user space unit 1/72 inch पर fixed था
- Acrobat 5.0 के बाद default page size का maximum
14,400 × 14,400units, यानी 200 × 200 inch है - PDF 1.6 से page dictionary के
/UserUnitसे default user space unit का size set किया जा सकता है - Acrobat 7.0
/UserUnitका maximum value75,000support करता है, जिससे maximum page dimension 15,000,000 inch बन सकता है
15,000,000 inchकरीब 381km है, और “PDF version 7” वाली अभिव्यक्ति PDF version नहीं, बल्कि Adobe Acrobat 7.0 से निकली लगती है
हाथ से बनाए गए PDF की basic structure
- PDF file में शुरुआत में version number और अंत में EOF marker होता है
- उदाहरण:
%PDF-1.6 - end marker:
%%EOF
- उदाहरण:
- version number के बाद page, text, graphics आदि दिखाने वाली object list आती है
xrefobjects की location बताने वाली cross-reference table है- PDF reader जाँचता है कि हर object file की शुरुआत से कितने bytes दूर है
trailerपूरे document की metadata रखता है- page count
- encryption status
- document root object
startxrefxreftable की start position की ओर इशारा करता है- PDF reader file के अंत से
startxrefvalue ढूँढकरxreftable पर जाता है
- PDF reader file के अंत से
- simple PDF file बनाने पर लेख देखें तो लाल rectangle वाला PDF हाथ से बनाया जा सकता है
Objects और page definition
- example PDF चार core objects से बना है
- object 1: लाल rectangle draw करने वाला stream object
- object 2: single page define करने वाला
Pageobject - object 3: कई pages की जानकारी रखने वाला
Pagesobject - object 4: document की main structure देने वाला
Catalogobject
Pageobject page contents को दूसरे object references से जोड़ता है1 0 Robject number 1, generation number 0 को reference करता है3 0 Rpage collection यानीPagesobject को reference करता है
- हाथ से PDF लिखने पर हर बार object location बदलने पर
xreftable values फिर से मिलानी पड़ती हैं, इसलिए यह बहुत झंझट भरा है - 16 अप्रैल 2025 के update में example code के
xref 0 4को गलत value के रूप में सुधारा गया- असली cross-reference table में 5 entries हैं, इसलिए
xref 0 5सही है
- असली cross-reference table में 5 entries हैं, इसलिए
/MediaBox और /UserUnit से page बड़ा करना
- PDF का page size हर
Pageobject में set किया जाता है /MediaBox [0 0 300 300]width और height दोनों 300 units वाला page बनाता है- default unit 1/72 inch है
- 300 units करीब 4.17 inch हैं
/MediaBoxको600 600में बदलने पर Acrobat page को8.33 x 8.33 inदिखाता है- Acrobat में allowed
/MediaBoxmaximum value14400 14400200 × 200 inch के रूप में दिखती है- इस value से ऊपर जाने पर Acrobat में warning आती है
/UserUnitजोड़ने से default user space unit को बड़ा किया जा सकता है/UserUnit 2page के दोनों dimensions को दोगुना कर देता है/MediaBox [0 0 14400 14400]और/UserUnit 2साथ में इस्तेमाल करने पर Acrobat इसे400.00 x 400.00 inदिखाता है
/UserUnit 75000लागू करने पर Acrobat page को 15,000,000.00 × 15,000,000.00 inch दिखाता है- यह करीब 381km × 381km है और मूल दावे से मेल खाता है
- example file: biggest.pdf
Acrobat और Preview के handling में अंतर
- Acrobat
/MediaBoxया/UserUnitको और बड़ा set करने पर भी page size को लगातार 15,000,000 inch ही दिखाता है /UserUnitvalue को75000से बड़ा set करने पर value बिना warning या error के limit कर दी जाती है/UserUnitके real-world use cases ज़्यादा नहीं लगते- Stack Overflow answer भी कहता है कि यह value व्यापक रूप से इस्तेमाल नहीं होती
- online examples ढूँढना मुश्किल था
- macOS Preview.app
/UserUnitsupport नहीं करता- सभी PDFs को default unit 1/72 inch में process करता है
- इसके बजाय Preview.app, Acrobat के विपरीत,
/MediaBoxपर बड़ी upper limit नहीं लगाता1के बाद 12 zeros वाली width भी accept कर लेता है- यह width मोटे तौर पर Earth और Moon के बीच की दूरी के स्तर की है
- और बड़ा
/MediaBoxvalue डालने पर ऐसी file भी बनाई जा सकती है जिसे Preview लगभग 37 trillion light-years squared size के PDF के रूप में दिखाता है- example file: universe.pdf
- document का अधिकतर हिस्सा खाली space है, और इसे print न करने की warning लगी है
1 टिप्पणियां
Hacker News की राय
PDF तकनीकी रूप से कई मायनों में भयावह है, लेकिन यह मेरे हाथ में रखी जा सकने वाली self-contained static file है—यह बात उन user-hostile dynamic/SaaS websites के मुकाबले शानदार है जो कभी भी गायब हो सकती हैं
PDF/A असली PDF के ज़्यादा करीब है, और खतरनाक फालतू चीज़ों का बड़ा हिस्सा हटा देता है
अगर आपको अजीब PDF शरारतें पसंद हैं, तो एक polyglot file है जो PDF/A भी है, CSV भी है और साथ ही Amiga soundtracker mod soundtrack भी: https://www.lab6.com/6
https://www.nytimes.com/2009/07/18/technology/companies/18am...
कई लोग JavaScript execution को लेकर तो चिंता करते हैं, लेकिन PDF files बिना ज़्यादा सवाल के इस्तेमाल करते हैं
किसी भी PDF को open source software से PDF/A में बदलना हो तो लगता है Ghostscript से PostScript में जाकर फिर वापस आने का ही तरीका है, लेकिन Ghostscript Affero license में है, जिससे कई समस्याएँ आ सकती हैं
पुराना GPL version भी है और ज़्यादातर PDF पर चलता है, लेकिन वह करीब 15 साल पुरानी चीज़ है
पिछली नौकरी में मुझे PDF/A से निपटना पड़ा था, और वह बिल्कुल मज़ेदार नहीं था
सिर्फ paragraphs को reconstruct करने में भी बहुत मेहनत लगी, tables parsing की तो बात ही छोड़िए
de facto standard होने के हिसाब से इसे बेहतर होना चाहिए, और PDF manual भी सच में बहुत खराब है
तुलना के लिए PNG का analysis करें, तो maximum width और height 2147483647, यानी 2^31 - 1 है
pHYs chunk से specify की जा सकने वाली minimum density 1 pixel per meter है, इसलिए 2 अरब meter सूरज के diameter 1.39 gigameter से भी बड़ा है: https://en.wikipedia.org/wiki/Orders_of_magnitude_(length)#g...
sCAL chunk ASCII floating-point इस्तेमाल करता है, इसलिए उससे उससे भी कहीं बड़े physical sizes represent किए जा सकते हैं
1:10,000,000 scale वाला world map pHYs के हिसाब से 10m से कम चौड़ा होगा, लेकिन sCAL के हिसाब से करीब 40,000km चौड़ा होगा
जिस पल आप PDF की width kilometers में नापने लगते हैं, समझ आ जाता है कि आप अच्छा technical article पढ़ रहे हैं
10 साल से भी ज़्यादा पहले Game of Life के PostScript implementation से बनाए गए PDF की याद आई
लगता है अभी भी चलता है, लेकिन macOS Preview को crash कर देता है: https://andrewcutler.net/docs/joke/life.pdf
हालांकि animation नहीं दिखता, सिर्फ final state दिखती है, और Firefox के PDF viewer में थोड़ी animation दिखती है
Skim भी Preview जैसा है, लेकिन grid नहीं दिखाता
यह लेख Umberto Eco की intellectual playfulness की याद दिलाता है
खासकर “On the Impossibility of Drawing a Map of the Empire on a Scale of 1 to 1” याद आता है: https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://en.wikipedia.org/wiki/On_Exactitude_in_Science
Preview में MediaBox में डाली जा सकने वाली value की upper limit Acrobat जैसी नहीं है, और यह 1 के बाद 12 zero वाली width भी accept कर लेता है
document inspector में page size 352777777777.78 x 10.59cm दिखता है, और यह width लगभग पृथ्वी और चंद्रमा के बीच की दूरी जितनी है
solar system के सभी planets को बगल-बगल रख दें तो भी वे इस document में आराम से समा जाएंगे
आखिरकार ruler की ज़रूरत थी
352777777777.78cm 3,527,777.7777778km है
दिलचस्प experiment है, alexwlchan
लेख में दो छोटी गलतियाँ हैं: “15,000,000,000.00 in” और “page size 15 billion inches” लिखी जगह 15 million inches सही है
आपने कहा कि text formatting मुश्किल है, लेकिन सिर्फ “Hello World” दो शब्दों वाला PDF example बनाना हो तो font object define करें, stream में
Tfसे font इस्तेमाल करें,Tdसे position set करें औरTjसे text लिख देंtext example के लिए भी धन्यवाद; यह मेरे किए attempt जैसा ही दिखता है, लेकिन ज़रूर कहीं कोई गलती रही होगी
spec के हिसाब से तो ज़रूरी लगता है
इस मोड़ पर Steven Wright को थोड़ा बदलकर कहने का मन करता है
“मेरे पास अमेरिका का नक्शा है। वह असली आकार का है”
समझ नहीं आता कि नक्शे का ऊपर वाला हिस्सा मेरी चलने की दिशा है या उत्तर, और पुराने नक्शों में हमेशा उत्तर ऊपर होता था, लेकिन Google Maps ऐसा नहीं दिखता, इसलिए भ्रम होता है
90 डिग्री घूमने पर नक्शा भी घूमता है, तो यह भी समझ नहीं आता कि घूमा नक्शा है या मैं
अगर रुके हुए हों तो नक्शा कैसे जाने कि मैं किस तरफ जा रहा हूं, इसलिए दिशा जानने के लिए शायद पहले चलना पड़ता है
स्मार्टफोन को आंखों के सामने पकड़ूं तो नक्शे का ऊपर वाला हिस्सा आसमान की तरफ होता है, और समझ नहीं आता कि नक्शे को ऊपर से नीचे देखते हुए पढ़ना चाहिए या नहीं
फोन पर Google Maps ठीक से इस्तेमाल करने की तरकीब जानना चाहता हूं
https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://scomedy.com/quotes/10779
“प्रिंट मत कीजिए” सुनकर ऐसा लगता है जैसे यह प्रिंट बम बनने के लिए तैयार वाक्य हो
आखिरी बार जब मैंने प्रिंटर इस्तेमाल किया था, Windows में print job cancel करना लगभग असंभव था
वे दिन मजेदार थे जब Wi‑Fi printer खुले होते थे या उनकी security कमजोर होती थी
मुझे जो इकलौता भरोसेमंद तरीका मिला है, वह है printer बंद करना और queue से print job हटाना
अगर printer बिल्कुल पास में न हो तो यह नहीं हो सकता, और समझ नहीं आता कि यह इतना मुश्किल क्यों है
करीब 30 साल पहले Microsoft के summer intern interview में, interviewer ने Excel को लेकर इससे बहुत मिलता-जुलता सवाल पूछा था
ऐसे विषय किसी व्यक्ति की जिज्ञासा और संभावित समस्याओं को तोड़कर समझने की क्षमता देखने के लिए हमेशा अच्छे होते हैं