तरीक़ा
यह साइट जो करती है, वह तकनीक के लिहाज़ से कोई बड़ी बात नहीं है। दुर्लभ बात यह है कि इसे आपकी फ़ाइलें कभी लिए बिना किया जाए, और यह ठीक-ठीक बताया जाए कि सीमाएँ कहाँ हैं।
बनाने के चार नियम
फ़ाइल डिवाइस से बाहर नहीं जाती
ब्राउज़र को फ़ाइल पढ़ना, उसे खोलना, बदलना और डाउनलोड बनाना आता है। सब कुछ वहीं होता है। कोई सर्वर कुछ लेता ही नहीं, क्योंकि यह साइट सिर्फ़ स्थिर फ़ाइलों का ढेर है।
नेटवर्क पर शून्य निर्भरता
किसी तीसरे से लोड होने वाली कोई लाइब्रेरी नहीं, कोई दूर का फ़ॉन्ट नहीं, कोई दूर की तस्वीर नहीं, कोई गिनती करने वाला कोड नहीं। पन्ना जो कुछ भी लोड करता है वह इसी डोमेन से आता है, और उसके सिवा कुछ लोड होता ही नहीं।
कोड पढ़ा जा सकता है
कुछ भी न दबाया गया है, न उलझाया गया है। एक औज़ार यानी एक फ़ाइल, उसी के नाम से। यही वह चीज़ है जिसकी वजह से वह इंसान भी जाँच कर सकता है जिसने यह साइट नहीं लिखी।
हर औज़ार अपने फ़ॉर्मैट और अपनी सीमाएँ ख़ुद बताता है
कभी “सारे फ़ॉर्मैट” नहीं। जो फ़ॉर्मैट कोई ब्राउज़र खोल ही नहीं सकता, वह मुखपृष्ठ पर लिख देने से मुमकिन नहीं हो जाता।
अनुकूलता की तालिका
यह पहला औज़ार लिखने से पहले चलाई गई जाँच की मुहिम का नतीजा है, और उस पर तारीख़ पड़ी है। ब्राउज़र बदलते रहते हैं: यह हर समीक्षा पर दोबारा जाँची जाती है, आगे नकल नहीं की जाती।
अनुकूलता July 30, 2026 को जाँची गई
तस्वीर के वे फ़ॉर्मैट जो ब्राउज़र खोल सकता है
इसी से तय होता है कि कोई औज़ार आपकी फ़ाइल दिखा और उस पर काम कर सकता है या नहीं। जो फ़ॉर्मैट यहाँ नहीं है वह “जल्द आ रहा है” नहीं है: वह है ही नहीं।
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| JPEG (.jpg) | yes | yes | yes |
| PNG (.png), चलती हुई भी | yes | yes | yes |
| WebP (.webp) | yes | yes | yes |
| Safari में संस्करण 14 से, macOS Big Sur और उसके बाद। | |||
| AVIF (.avif) | yes | yes | yes |
| Chrome 85, Firefox 93, Safari 16.1। | |||
| GIF (.gif) | yes | yes | yes |
| BMP (.bmp) | yes | yes | yes |
| SVG (.svg) | yes | yes | yes |
| ICO (.ico) | yes | yes | yes |
| TIFF (.tif, .tiff) | no | no | yes |
| TIFF दिखाने वाला इकलौता ब्राउज़र Safari है। TIFF का मेटाडेटा, इसके उलट, हर जगह पढ़ा जा सकता है: वह फ़ाइल के शीर्ष हिस्से में रहता है, तस्वीर के अंदर नहीं। | |||
| HEIC, HEIF (iPhone की फ़ोटो) | no | no | yes |
| Safari 17 और iOS 17 इन्हें दिखाते हैं। Chrome, Firefox और Edge ने इन्हें कभी नहीं खोला, कोडेक पर लगे पेटेंट की वजह से। सॉफ़्टवेयर वाला डिकोडर दस मेगाबाइट से ज़्यादा का है: छोड़ा गया, और लिख दिया गया। | |||
| JPEG XL (.jxl) | partly | partly | yes |
| 30/07/2026 को ताज़ा किया गया। इस पूरे समूह का सबसे डाँवाडोल फ़ॉर्मैट: 2022 में Chromium से हटाया गया, फिर Rust में लिखा एक डिकोडर फ़रवरी 2026 में Chrome 145 में और जून 2026 में Firefox 152 में लौटा, पर दोनों में एक झंडे के पीछे, शुरू से बंद। Safari उसे अपने संस्करण 17 से बिना कुछ किए दिखाता है। कोई भी ब्राउज़र उसे लिख नहीं सकता। जब तक हालात बदलते रहेंगे, इस साइट का कोई औज़ार उस पर नहीं टिकेगा। | |||
वे फ़ॉर्मैट जो ब्राउज़र लिख सकता है
इसी से तय होता है कि कोई औज़ार आपकी तस्वीर को किसमें बदल सकता है। जाल चुपचाप बिछा है: जब ब्राउज़र माँगा गया फ़ॉर्मैट लिख नहीं पाता, तो वह बिना बताए PNG लौटा देता है। इसलिए हमारे औज़ार भरोसा करने के बजाय नतीजे का प्रकार जाँचते हैं।
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| PNG लिखना | yes | yes | yes |
| इकलौता फ़ॉर्मैट जिसे विशिष्टि ख़ुद ज़रूरी बनाती है: यही सबका सहारा भी है। | |||
| JPEG लिखना | yes | yes | yes |
| WebP लिखना | yes | yes | no |
| Chrome 50, Edge 79, Firefox 96। Safari का कोई भी संस्करण, न Mac पर न iPhone पर, कैनवस से WebP लिख सकता है। इस पूरी तालिका की सबसे काम की पंक्ति यही है: जो कन्वर्टर बिना यह बताए “WebP” का ऐलान करता है, वह हर दूसरे iPhone वाले से झूठ बोल रहा है। | |||
| AVIF लिखना | no | no | no |
| यह पंक्ति 30/07/2026 को सुधारी गई। यह दावा कि Chrome अपने संस्करण 124 से कैनवस से AVIF लिख सकता है, हर जगह घूम रहा है, साइट दर साइट नकल हुआ, और हमें उसका पहले दर्जे का एक भी स्रोत नहीं मिला: न Chrome की सुविधाओं की सूची में कोई प्रविष्टि, न कोई संस्करण-टिप्पणी, न कोई अलग अनुकूलता पन्ना। इसलिए हमारे औज़ार उस पर नहीं टिकते: वे मान लेने के बजाय चलते-चलते नापते हैं कि ब्राउज़र क्या लिख सकता है। कल कोई ब्राउज़र इसे खोल दे, तो बदलने वाला औज़ार बिना एक भी लाइन बदले उसे देने लगेगा। | |||
ब्राउज़र की वे क्षमताएँ जिन पर ये औज़ार टिके हैं
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| ब्राउज़र का अपना एन्क्रिप्शन (AES-GCM, पासवर्ड से बनी चाबी, SHA-256) | yes | yes | yes |
| 2017 से हर जगह मौजूद, पर सिर्फ़ उसी पन्ने पर जो HTTPS से परोसा गया हो। यह साइट वैसी ही है। | |||
| ब्राउज़र की अपनी दबाई और खोलाई (gzip, deflate) | yes | yes | yes |
| हर ब्राउज़र में मौजूद। 30/07/2026 को जोड़ी गई काम की बारीकी: deflate का कच्चा रूप, जो इकलौता ज़िप बनाने के काम आता है, बाकी सबके बाद आया (Chrome 103, Firefox 113, Safari 16.4)। इसलिए 2020 और 2022 के बीच लिखा ज़िप का कोड ऐसे Chrome पर भी नाकाम हो सकता था जो कहता था कि उसे दबाना आता है। | |||
| स्क्रीन से बाहर तस्वीर पर काम (अलग धागे में) | yes | yes | yes |
| Chrome 69, Firefox 105, Safari 16.4। यही वह चीज़ है जो बड़ी फ़ाइल पर पन्ने को जमने से बचाती है। | |||
| सिस्टम की मदद से बारकोड और QR कोड पढ़ना | partly | no | no |
| 30/07/2026 को और कड़ा किया गया, और यह उससे सख़्त है जो हमने पहले लिखा था। यह सुविधा वेब का कोई मानक नहीं है: यह ऑपरेटिंग सिस्टम पर टिकी है, इसलिए यह सिर्फ़ macOS, ChromeOS और Android पर Chromium में मौजूद है। यह Windows और Linux से ग़ायब है, यानी ज़्यादातर डेस्कटॉप कंप्यूटरों से। Firefox ने इसे कभी बनाया ही नहीं। Safari में 17 से एक झंडे के पीछे प्रयोगात्मक रूप है, और वह iOS 18 से टूटा हुआ है। इसलिए QR कोड का कोई औज़ार इस पर नहीं टिक सकता: उसे अपना पढ़ने वाला हिस्सा ख़ुद साथ रखना पड़ता। | |||
| असली “इस नाम से सहेजें” खिड़की से सहेजना | yes | no | no |
| सिर्फ़ Chromium में; Firefox और Safari ने यह इंटरफ़ेस लेने से मना कर दिया। इसका सहारा साधारण डाउनलोड है, जो हर जगह चलता है: इसलिए हमारे औज़ार शुरू से वही इस्तेमाल करते हैं। | |||
| फ़ाइल का टुकड़ा-दर-टुकड़ा फ़िंगरप्रिंट निकालना | no | no | no |
| ब्राउज़र SHA-256 फ़िंगरप्रिंट बहुत अच्छे से निकालता है, पर सिर्फ़ तब जब पूरी फ़ाइल एक ही बार में सौंप दी जाए: उसे थोड़ा-थोड़ा करके खिलाने वाली कोई सुविधा है ही नहीं। यही वह चीज़ है जो फ़िंगरप्रिंट वाले औज़ार पर साइज़ की सीमा लगाती है, और वह सीमा यही वजह अपने साथ रखती है। | |||
| फ़ाइल को धारा की तरह एन्क्रिप्ट करना, उसे पूरा लोड किए बिना | no | no | no |
| फ़िंगरप्रिंट जैसी ही सीमा: ब्राउज़र का एन्क्रिप्शन एक पूरे टुकड़े पर काम करता है, और धारा वाले रूप की माँग 2016 से बिना जवाब खुली पड़ी है। ख़ुद टुकड़े करना मुमकिन है, पर तब हर टुकड़े को उसकी जगह से बाँधना पड़ता है, वरना टुकड़े हटाए या आगे-पीछे किए जा सकते हैं और मुहर को पता भी नहीं चलेगा। हमारा एन्क्रिप्शन औज़ार इस तरह की कोई जुगाड़ू बनावट खड़ी करने के बजाय साइज़ की एक ईमानदार सीमा बता देना पसंद करता है। | |||
| ब्राउज़र में आधुनिक ढंग से चाबी बनाना (Argon2) | no | no | no |
| पासवर्ड से चाबी बनाने के लिए आज पहली सिफ़ारिश Argon2 है, और वह किसी भी ब्राउज़र में मौजूद नहीं है: उसके लिए WebAssembly का इंजन साथ रखना पड़ता। इसलिए हमारा एन्क्रिप्शन औज़ार PBKDF2 को SHA-256 और 600,000 चक्करों के साथ इस्तेमाल करता है, जो 2026 में इस क्षेत्र की मानक संस्था की छापी हुई क़ीमत है, और वह इसे स्क्रीन पर दिखा देता है, इसके बजाय कि कुछ बेहतर होने का भरम बना रहे। | |||
| कैनवस से ICO आइकन फ़ाइल लिखना | no | no | no |
| कोई भी ब्राउज़र ICO नहीं लिख सकता: उसका डिब्बा PNG तस्वीरों के चारों ओर हाथ से जोड़ना पड़ता है। ICO के अंदर PNG Windows Vista से और Firefox 9 से चलता है; Chrome, Edge और Safari के लिए हमें सिर्फ़ इस्तेमाल के प्रमाण मिले, कोई इंजीनियरी स्रोत नहीं। आइकन बनाने वाले औज़ार का वादा करने से पहले यह जान लेना चाहिए। | |||
| CRC-32 निकालना, जो ज़िप में ज़रूरी है | no | no | no |
| ब्राउज़र सिर्फ़ क्रिप्टोग्राफ़ी वाले फ़िंगरप्रिंट देता है (SHA-1 और SHA-2)। ज़िप फ़ाइल अपने हर शीर्ष हिस्से में जो CRC-32 माँगती है, वह इसलिए साधारण जावास्क्रिप्ट में हाथ से लिखना पड़ता है। यह क़रीब तीस पंक्तियों में हो जाता है, और बिना लाइब्रेरी के ज़िप बनाने के लिए यही इकलौती कमी बचती है। | |||
मेमोरी की सीमाएँ, वही जो सचमुच टैब गिरा देती हैं
ये किसी मानक में लिखी नहीं हैं, और इसीलिए इतने सारे कन्वर्टर फ़ोन पर चुपचाप गिर जाते हैं। इस साइट का हर औज़ार अपनी सीमा बताता है, और उससे आगे साफ़-साफ़ मना कर देता है।
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| कैनवस का ज़्यादा से ज़्यादा क्षेत्रफल | yes | yes | partly |
| iPhone और iPad पर कैनवस का क्षेत्रफल लंबे समय तक 1.67 करोड़ पिक्सेल पर बँधा रहा (यानी 4096 गुणा 4096); iOS 18 ने उसे 6.71 करोड़ कर दिया। 50 मेगापिक्सेल की फ़ोटो अब भी पुरानी सीमा से ऊपर है: जो औज़ार तस्वीर दोबारा बनाता है उसे पहले उसे छोटा करना पड़ता है, या मना करना पड़ता है। | |||
| कैनवसों को कुल कितनी मेमोरी मिल सकती है | yes | yes | partly |
| iOS पर Safari एक टैब के सारे कैनवसों की कुल मेमोरी बाँध देता है, डिवाइस के हिसाब से कुछ सौ मेगाबाइट के आसपास। इसलिए जत्थे में काम करते समय हर तस्वीर को अगली पर जाने से पहले छोड़ना पड़ता है, सिर्फ़ आख़िर में नहीं। | |||
ब्राउज़र में PDF, और लाइब्रेरियों की असली हालत
ब्राउज़र PDF के साथ दिखाने के सिवा कुछ नहीं कर सकता। किसी भी फेरबदल के लिए साथ रखा हुआ कोड चाहिए, और यही इकलौता अपवाद है जिसकी इस साइट का सिद्धांत इजाज़त देता है। 30 जुलाई 2026 की जाँच में जो निकला वह यह रहा, और यह भी कि PDF वाला कोना आधा खुलने के बजाय किसी फ़ैसले का इंतज़ार क्यों कर रहा था।
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| बिना किसी लाइब्रेरी के PDF जोड़ना, काटना या बदलना | no | no | no |
| ब्राउज़र में ऐसा कुछ नहीं है जो PDF की बनावट पढ़ सके। दिखाना पढ़ना नहीं है: उसमें बना हुआ दर्शक अपनी कोई भी क्षमता किसी वेब पन्ने को उधार नहीं देता। | |||
| फेरबदल की वह लाइब्रेरी जो प्रोजेक्ट की पर्ची में सोची गई थी | partly | partly | partly |
| नई बात, और इसी से फ़ैसला बदल गया। यह लाइब्रेरी MIT लाइसेंस पर है और बहुत कुछ जानती है: जोड़ना, काटना, घुमाना, बनाना, फ़ॉर्म भरना, मेटाडेटा लिखना। पर उसका आख़िरी छपा संस्करण नवंबर 2021 का है, और उसका लेखक मई 2024 से अनुपलब्ध है: जिस कोड को यह प्रोजेक्ट साथ रखने वाला था, उसे चार साल से ज़्यादा से एक भी सुधार नहीं मिला। उसे PDF एन्क्रिप्ट करना भी नहीं आता और डिक्रिप्ट करना भी नहीं, ठीक वैसे ही जैसा उसका अपना दस्तावेज़ीकरण कहता है। | |||
| PDF पर पासवर्ड लगाना या हटाना | partly | partly | partly |
| तकनीकी तौर पर यहीं-के-यहीं मुमकिन है, जो हमें लगता नहीं था। उसी लाइब्रेरी की एक सँभाली जा रही अगली कड़ी, वह भी MIT लाइसेंस पर, PDF का एन्क्रिप्शन AES-256 तक करती है और सुरक्षित दस्तावेज़ खोल भी सकती है। इसलिए अब यह तकनीक की मजबूरी नहीं रही: यह एक फ़ैसला बन गया, यानी सिद्धांत में नामज़द कोड की जगह एक नई अगली कड़ी साथ रखने का, और उसे बरसों के लिए इस साइट की इकलौती निर्भरता बनाने का। यह फ़ैसला संस्था का है, कारख़ाने का नहीं। | |||
| PDF के पेजों को तस्वीरों में बदलना | partly | partly | partly |
| फेरबदल की लाइब्रेरी से नामुमकिन, क्योंकि वह रेंडरिंग इंजन नहीं है। इसके लिए Firefox के दर्शक के पीछे वाला इंजन साथ रखना पड़ता, यानी दबाने से पहले क़रीब 1.7 मेगाबाइट कोड, सिर्फ़ एक औज़ार के लिए: पूरी एक साइट जितना वज़न। इस पर अलग से दोबारा सोचा जा सकता है, पर कभी चुपचाप नहीं। | |||
| PDF को सचमुच हल्का करना | partly | partly | partly |
| फेरबदल की लाइब्रेरी किसी दस्तावेज़ की अंदरूनी वस्तुओं को एक साथ बाँध सकती है, जिससे फ़ॉर्मों से भरे PDF पर थोड़ा फ़ायदा होता है। वह न तस्वीरें दोबारा दबाती है, न फ़ॉन्ट, और साधारण PDF का ज़्यादातर वज़न यही दोनों बनाते हैं। इसलिए स्कैन किए दस्तावेज़ पर पाने को लगभग कुछ नहीं है, और जो औज़ार इसका उलटा वादा करे वह झूठ बोल रहा होगा। | |||
| PDF का मेटाडेटा सचमुच साफ़ करना | partly | partly | partly |
| दो जाल, जो सिर्फ़ कोड पढ़ने से खुलते हैं। पहला, लाइब्रेरी हर बार फ़ाइल खोलने पर अपनी तरफ़ से एक बनाने वाला और एक बदलाव की तारीख़ लिख देती है, तब भी जब किसी ने माँगा न हो। दूसरा, वह PDF के आधुनिक मेटाडेटा वाले हिस्से को कभी नहीं छूती, यानी उसे जिसमें वही शीर्षक और वही लेखक हो सकते हैं जो बाकी जगह हैं: जो सफ़ाई पहले पर ही रुक जाए वह झूठी होगी, और उसे बनी हुई फ़ाइल दोबारा पढ़कर साबित करना पड़ेगा। | |||
| साथ रखी लाइब्रेरी से PDF का पेज तस्वीर की तरह उकेरना (रास्टराइज़ करना) | no | no | no |
| PDF वाले कोने की लाइब्रेरी PDF बनाती है, उनके पेज उकेरती नहीं: उसका सार्वजनिक इंटरफ़ेस रेंडरिंग का एक भी चिह्न बाहर नहीं देता। रास्टराइज़ करने के लिए दूसरा इंजन चाहिए, जिसका असली वज़न उसकी छपी हुई फ़ाइलों पर नापा गया है और वह दबे हुए रूप में 1.72 MB है (इंटरफ़ेस के लिए 454,669 B, काम करने वाले हिस्से के लिए 1,262,398 B), और सिकोड़ने पर क़रीब 502 KB। इसलिए “PDF से तस्वीरें” छोड़ दिया गया है, और लिख दिया गया है। | |||
| ब्राउज़र में PDF को AES-256 से एन्क्रिप्ट करना, और उसे खोलना | yes | yes | yes |
| साथ रखी लाइब्रेरी से मुमकिन है, पर सिर्फ़ रिवीज़न 5 में (2008 का Adobe वाला जोड़), PDF 2.0 मानक के रिवीज़न 6 में नहीं। रिवीज़न 5 पासवर्ड की जाँच SHA-256 के एक ही चक्कर से करता है; रिवीज़न 6 दोहराया हुआ हैश इस्तेमाल करता है, और हमला करने वाले औज़ारों की सार्वजनिक नापें कोशिश की रफ़्तार में चार से पाँच गुणा-दर-गुणा का फ़र्क़ दिखाती हैं। रिवीज़न 5 इकलौता है जिसे PDF 2.0 मानक पुराना घोषित करता है। तरीक़ा फ़ाइल के शीर्ष हिस्से से तय होता है: नापा गया कि सिर्फ़ “1.7ext3” लिखने से AES-256 चलता है, वरना RC4 या AES-128 मिलता है। | |||
| AES-256 रिवीज़न 5 से एन्क्रिप्ट किया PDF ब्राउज़र के अपने रीडर में खोलना | yes | yes | partly |
| इंजनों के सोर्स कोड में जाँचा गया: PDFium (Chrome, Edge) रिवीज़न 5 को अपनी पासवर्ड जाँच में ही सँभाल लेता है, और pdf.js (Firefox) में रिवीज़न 5 के लिए अलग क्लास है, जो रिवीज़न 6 वाली से अलग है। Adobe Acrobat इसे संस्करण 9 से खोलता है। macOS और iOS के Preview के लिए, और Android के रीडरों के लिए, पहले दर्जे का कोई स्रोत नहीं मिला: इसलिए Safari वाले खाने में “कुछ हद तक” लिखा है, और यह साइट इससे ज़्यादा कुछ नहीं कहती। | |||
| फ़ॉन्ट इंजन साथ रखे बिना PDF में उच्चारण-चिह्न वाली या ग़ैर-लातीनी लिखाई लिखना | partly | partly | partly |
| जिस फ़ॉन्ट इंजन को यह लाइब्रेरी हर अपने फ़ॉन्ट के लिए माँगती है (और जिसे हम साथ नहीं रखते), उसके बिना सिर्फ़ PDF के 14 मानक फ़ॉन्ट ही मौजूद रहते हैं, Windows-1252 में: यानी क़रीब 218 लातीनी अक्षर। उस समूह से बाहर का अक्षर आई हुई इस लाइब्रेरी में कोई ग़लती नहीं उठाता: कोड अपवाद पकड़ लेता है और एक सवालिया निशान लिख देता है। इसलिए जो औज़ार लिखाई लिखता है, उसे आई हुई लिखाई जाँचनी पड़ती है और यह भी नाम लेकर बताना पड़ता है कि वह क्या नहीं लिख सकता। | |||
| PDF की छपाई या नक़ल सचमुच रोकना | no | no | no |
| फ़ॉर्मैट इन रोकों को फ़ाइल में लिखने देता है, पर वे सिर्फ़ पढ़ने वाले सॉफ़्टवेयर से की गई गुज़ारिशें हैं: फ़ाइल खुलते ही सामग्री खुल जाती है, और जो सॉफ़्टवेयर गुज़ारिश को अनदेखा कर दे वह फिर भी छाप देता है। कोई भी औज़ार, चाहे यहीं का हो या दूर का, इससे बेहतर नहीं कर सकता। इसलिए यह साइट वे डिब्बे देती ही नहीं। | |||
हमने क्या छोड़ा, और क्यों
जो साइट अपनी सीमाओं के बारे में ईमानदार है, वह उस साइट से ज़्यादा काम की है जो सब कुछ का वादा करती है। यह रही उन चीज़ों की सूची जो हमने न करने का फ़ैसला किया, हर फ़ैसले की वजह के साथ। ये पंक्तियाँ तभी हिलेंगी जब वजह हिलेगी।
- किसी तस्वीर के अंदर की लिखाई पहचानना, और iPhone की HEIC फ़ोटो पढ़ना: इसके लिए जो इंजन चाहिए उनका वज़न दस से पंद्रह मेगाबाइट तक है। कमज़ोर इंटरनेट पर थोड़ी-सी लिखाई पढ़ने के लिए पंद्रह मेगाबाइट उतारना घाटे का सौदा है। इस पर दोबारा सोचा जा सकता है, पर कभी चुपचाप नहीं।
- वीडियो, किसी भी शक्ल में: ब्राउज़र के अंदर वीडियो बदलने वाले इंजन क़रीब तीस मेगाबाइट के होते हैं। नहीं।
- आर्टिफ़िशियल इंटेलिजेंस से पीछे का हिस्सा हटाना: इसके लिए एक मॉडल उतारना पड़ता है, और मॉडल एक भारी और अपारदर्शी फ़ाइल होती है। नहीं।
- वह सब जिसे अपने स्वभाव से ही नेटवर्क चाहिए: लिंक छोटा करना, छोटे लिंक को खोलकर देखना, किसी डोमेन का मालिक पूछना, किसी दूर के पन्ने की झलक दिखाना। ये औज़ार यहीं-के-यहीं नहीं चल सकते, इसलिए ये यहाँ नहीं हैं। यह कोई कमी नहीं, यही इस प्रोजेक्ट की परिभाषा है।
- फ़ोटो की जगह दिखाने के लिए नक्शा दिखाना: यह इस साइट की इकलौती बाहर जाने वाली रिक्वेस्ट होती, और वह फ़ाइल की सबसे नाज़ुक जानकारी अपने साथ ले जाती। निर्देशांक खुले तौर पर दिखा दिए जाते हैं, उनका क्या करना है यह आप तय करें।
- PDF को तस्वीरों में बदलना: इसके लिए पेजों को चित्र की तरह बनाना पड़ता, और PDF बनाना अपने आप में एक पूरा पेशा है (फ़ॉन्ट, वेक्टर, पारदर्शिता, रंगों के दायरे)। जो लाइब्रेरी हम साथ रखते हैं उसे PDF बनाना आता है, उसका पेज चित्र की तरह उकेरना नहीं। इंटरनेट का इकलौता गंभीर रेंडरिंग इंजन, उसकी अपनी छपी हुई फ़ाइलों पर नापा गया, सिर्फ़ इसी एक काम के लिए 1.72 MB का है। उल्टी दिशा, यानी तस्वीरों से PDF, मेज़ पर रखी है और चलती है।
- PDF पर दस्तख़त करना: इसी वजह से, और यही सबसे खलने वाली बात है। रेंडरिंग इंजन के बिना हम पेज दिखा ही नहीं सकते; और बिना दिखाए हम किसी को यह नहीं करने दे सकते कि वह अपना दस्तख़त जहाँ चाहे वहाँ रखे। आँख मूँदकर तय जगह पर टिका दिया गया दस्तख़त बेकार से भी बुरा होता। हमें ऐसा औज़ार देने से बेहतर एक ख़ाली जगह छोड़ना लगता है जो किसी दस्तावेज़ को बिगाड़ दे।
- QR कोड पढ़ना: ब्राउज़र जो सुविधा देते हैं वह ऑपरेटिंग सिस्टम पर टिकी है। इसलिए वह सिर्फ़ Chromium के एक हिस्से में, macOS, ChromeOS और Android पर मौजूद है; Windows और Linux पर नहीं है, Firefox ने उसे कभी बनाया ही नहीं, और Safari का प्रयोगात्मक रूप iOS 18 से टूटा हुआ है। उस पर टिका औज़ार डेस्कटॉप के ज़्यादातर लोगों के यहाँ चलता ही नहीं। QR कोड बनाना, इसके उलट, नक्शे में बना हुआ है: वह हाथ से किया जा सकता है, और वह मानक इस्तेमाल के लिए खुला है।
- PDF की छपाई या नक़ल पर रोक लगाना: फ़ॉर्मैट इसकी इजाज़त देता है, और बहुत सारे औज़ार ये डिब्बे इसलिए दिखाते हैं कि वे तसल्ली देते हैं। ये सिर्फ़ पढ़ने वाले सॉफ़्टवेयर से की गई गुज़ारिशें हैं: फ़ाइल खुलते ही सामग्री खुल जाती है, और जो सॉफ़्टवेयर गुज़ारिश को अनदेखा कर दे वह फिर भी छाप देता है। स्टिकर जैसे ताले को ताला बताकर बेचना ठीक वही झूठ होता जिसे न बोलने के लिए यह साइट बनी है।
- माइक्रोफ़ोन से रिकॉर्ड करना, यानी जगह 34 का “डिक्टाफ़ोन” वाला आधा हिस्सा: इस साइट के औज़ार वाले पन्ने की बनावट हर औज़ार को एक ही इनपुट देती है, यानी एक फ़ाइल, एक लिखाई, या कुछ भी नहीं, और भरोसे की हर पट्टी ठीक उसी इनपुट की बात करती है। माइक्रोफ़ोन एक चौथा इनपुट होता, अपने अलग वादे के साथ। और सबसे बड़ी बात, जो मशीन हर छपाई से पहले इस साइट को जाँचती है उसके पास माइक्रोफ़ोन ही नहीं है: इसलिए हम यह साबित ही नहीं कर पाते कि कोई रिकॉर्डिंग बाहर नहीं जाती, और हम ऐसा वादा नहीं छापते जिसे हम कस के देख न सकें। इसलिए जगह 34 पर “रिकॉर्डिंग काटें” है, और आपका डिवाइस वह काम अपने पास रखता है जो वह पहले से बहुत अच्छे से करता है।
- क्लास के टाइमर के लिए प्रोजेक्टर वाला विशाल डिस्प्ले: हमारी डिज़ाइन शैली का सबसे बड़ा अक्षर गिनती के डिब्बों वाला है, और वह कमरे के पिछले सिरे से पढ़े जाने के लिए नहीं बनाया गया था। विशाल डिस्प्ले एक नया डिज़ाइन पुर्ज़ा होता, शैली जमी हुई है, और जो चीज़ कम पड़े उसे किसी औज़ार के बीचोंबीच गढ़ने के बजाय लिख लिया जाता है। पूरी स्क्रीन वाला मोड मौजूद है और पूरी स्क्रीन घेरता भी है, पर वह अंकों को बड़ा नहीं करता, और पन्ना यह दो बार कहता है। यह एक माँग है, वह दर्ज है, वह दबाई नहीं गई है।
- पर्चा निकालने वाले औज़ार का घूमता पहिया, इसी वजह से: यह एक ऐसा पुर्ज़ा है जो हमारी डिज़ाइन शैली में है ही नहीं। और पहिया किसी पर्चे को ज़्यादा न्यायसंगत नहीं बनाता, वह उसका तमाशा बनाता है। पर्चे को न्यायसंगत उसका बेतरतीबी बनाने वाला हिस्सा और झुकाव का न होना बनाता है, और औज़ार दोनों को उनके हिसाब के साथ दिखाता है: n में से एक मौका, n का क्रमगुणित इतने संभव क्रम।
- तारीख़ का हिसाब लगाने वाले औज़ार में क्लिक करने लायक़ कैलेंडर: हमारी शैली में तारीख़ का कोई खाना बना ही नहीं है, और ब्राउज़र का अपना तारीख़ वाला खाना अपनी ही किनारी और अपनी ही ऊँचाई लेकर आता, जो शैली से बाहर होती। इसलिए तारीख़ें अंतरराष्ट्रीय ढंग से टाइप की जाती हैं, और इसका एक असली फ़ायदा भी है: “03/04” का मतलब आधी दुनिया में 3 अप्रैल है और बाकी आधी में 4 मार्च।
- तारीख़ के हिसाब में सरकारी छुट्टियाँ: वे देश दर देश अलग होती हैं, कभी एक ही देश के अलग-अलग हिस्सों में भी, उनकी तारीख़ें हर साल हिलती हैं, और शनि-रविवार को पड़ने वाली छुट्टी के बदले अक्सर कोई और दिन दिया जाता है जो मामला दर मामला तय होता है। जमी हुई सूची बारह महीनों में ग़लत हो जाती, और यह प्रोजेक्ट पूरी दुनिया के लोगों के लिए है। इसलिए गिने जाने वाले कामकाजी दिन सोमवार से शुक्रवार तक हैं, बिना किसी अपवाद के, और पन्ने पर यह लिखा है।
- इकाइयाँ बदलने वाले औज़ार में छपाई का डिडो पॉइंट, और यही सबसे बताने लायक़ छूट है: कोई भी माप-विज्ञान संस्था उसे परिभाषित नहीं करती, और जो किताबें उसका ज़िक्र करती हैं वे चार अलग-अलग क़ीमतें देती हैं। जब चार दूसरे दर्जे के स्रोत आपस में उलट बात करते हों और पहले दर्जे का कोई स्रोत हो ही नहीं, तो नकल करने को कुछ बचता ही नहीं। वेब का पॉइंट, इसके उलट, ठीक इंच का बहत्तरवाँ हिस्सा है, और यह एक विशिष्टि में काले पर सफ़ेद लिखा हुआ है।
- ZIP आर्काइव को पासवर्ड से बचाना, दोनों दिशाओं में: इस फ़ॉर्मैट की पुरानी एन्क्रिप्शन 1994 में छपे एक हमले से टूट चुकी है, और आधुनिक वाली एक निजी कंपनी का जोड़ है जिसके कई रूप हैं। हम भारी मेहनत करके ऐसी सुरक्षा देते जिसे हम ईमानदारी से मज़बूत नहीं कह पाते। सुरक्षा वाले कोने का एन्क्रिप्शन औज़ार असली दिक़्क़त हल करता है, और वह अपनी पूरी विधि दिखाता है।
PDF वाले कोने के फ़ैसले, और वे किन सबूतों पर टिके हैं
PDF वाला कोना खोलने के लिए तीन फ़ैसले लिए गए, और हर एक की कोई क़ीमत है। वे यह रहे, इस बात के साथ कि जाँच में असल में क्या निकला। जो फ़ैसला यह न बताए कि वह किस पर टिका है, वह फ़ैसला नहीं, एक राय है।
पहला फ़ैसला: यह साइट एक लाइब्रेरी साथ रखती है, और सिर्फ़ एक। PDF हाथ से लिखना बेतुका है: यह अप्रत्यक्ष वस्तुओं, आड़े-तिरछे संदर्भों की तालिकाओं और दबी हुई धाराओं का फ़ॉर्मैट है, जहाँ एक बाइट की ग़लती पूरी फ़ाइल को अपठनीय कर देती है। यही वह अपवाद है जिसकी इस प्रोजेक्ट का सिद्धांत इजाज़त देता है, और यही इकलौता लिया गया अपवाद है। वह कोड हम ख़ुद परोसते हैं, कभी किसी बाँटने वाले नेटवर्क से नहीं: PDF कोने के पन्ने उसे इसी साइट से लोड करते हैं, उसका संस्करण फ़ाइल के नाम में ही जड़ा है ताकि कोई अपग्रेड चुपचाप न हो सके, उसका मुक्त लाइसेंस उसके बगल में परोसा जाता है, और उसका ठीक-ठीक वज़न साइट के हर निर्माण पर डिस्क से नापा जाता है, इसी पन्ने पर थोड़ा नीचे।
हमने मशीन से एक बात और जाँची: इस फ़ाइल में नेटवर्क का एक भी बुलावा नहीं है, एक भी नहीं, और सामग्री वाला ताला हर निर्माण पर इसे दोबारा जाँचता है, कच्ची फ़ाइल पर, टिप्पणियाँ हटाए बिना भी। साथ रखी गई लाइब्रेरी की जाँच औज़ार जैसी होती है, और उससे भी कड़ी।
दूसरा फ़ैसला: संस्करण। जिस लाइब्रेरी को शुरुआती सिद्धांत ने नाम से चुना था, उसे नवंबर 2021 से एक भी सुधार नहीं मिला और उसका लेखक मई 2024 से अनुपलब्ध है: हमने उसी मुक्त लाइसेंस के तहत चलती हुई अगली कड़ी ली। उस अगली कड़ी के दो संस्करणों में से हमने ज़्यादा ठहरा हुआ नहीं, बल्कि ज़्यादा नया चुना, और वजह ठीक-ठीक यह थी: पिछला संस्करण किसी सुरक्षित दस्तावेज़ की अंदरूनी पहचान सहेजने के समय से बनाता था, हैश करके। ऐसी पहचान ताक़त लगाकर वापस निकाली जा सकती है, यानी वह हर एन्क्रिप्ट की गई फ़ाइल पर मिलीसेकंड तक की तारीख़ लगा देता। जिस साइट का वादा ही यह हो कि कुछ रिसता नहीं, वहाँ यह चलने लायक़ नहीं था। जो संस्करण हमने रखा है, वह यह पहचान बेतरतीब ढंग से निकालता है।
तीसरा फ़ैसला, और इसकी क़ीमत सबसे ज़्यादा है: PDF का पासवर्ड मानक के सबसे ऊँचे दर्जे पर नहीं है, और हम यह काम करने से पहले ही बता देते हैं। PDF में AES-256 करने के दो तरीक़े हैं: रिवीज़न 5, जिसे Adobe ने 2008 में छापा, और PDF 2.0 मानक का रिवीज़न 6। एन्क्रिप्शन का तरीक़ा एक ही है; जो बदलता है वह पासवर्ड की जाँच है। रिवीज़न 5 उसे एक ही हिसाब में कर लेता है, रिवीज़न 6 उसे जानबूझकर धीमा करता है, और हमला करने वाले औज़ारों की छपी हुई नापों में कोशिश की रफ़्तार का फ़र्क़ चार से पाँच गुणा-दर-गुणा का निकलता है। यह लाइब्रेरी सिर्फ़ रिवीज़न 5 लिखती है, जो इकलौता ऐसा भी है जिसे PDF 2.0 मानक पुराना घोषित करता है।
हम “AES-256” लिखकर चुप रह सकते थे, जैसा यह काम देने वाली ज़्यादातर साइटें करती हैं। हमने यह चुना कि बटन दबाए जाने से पहले ही रिवीज़न, चाबी की लंबाई और चाबी बनाने का तरीक़ा दिखा दिया जाए, और असली पासफ़्रेज़ बनाने की तरफ़ भेजा जाए। छोटे शब्द के साथ यह औज़ार कुछ भी नहीं बचाता; बेतरतीब चुने हुए कई शब्दों के वाक्यांश के साथ यह सचमुच बचाता है। फ़र्क़ आपके हाथ में है, बशर्ते किसी ने आपको यह बताया हो।
एक नापा हुआ जाल, और वह दिखता ही नहीं। एन्क्रिप्ट किया दस्तावेज़ एक ख़ास तरह से सहेजने पर, यह लाइब्रेरी दस्तावेज़ का शीर्षक, लेखक और सॉफ़्टवेयर सुरक्षित फ़ाइल के अंदर खुले तौर पर पढ़ने लायक़ छोड़ देती है: उन्हें साधारण टेक्स्ट एडिटर में देखा जा सकता है। यह हमें अपनी ही निकली हुई फ़ाइलों के बाइट दोबारा पढ़ने से पता चला, किसी दस्तावेज़ीकरण से नहीं। इसलिए यह औज़ार सिर्फ़ उसी तरह से सहेजता है जिसमें कुछ नहीं रिसता, एन्क्रिप्ट करने से पहले पहचान वाली पर्ची हटा देता है, और जाँच का ताला अब हर बनी हुई फ़ाइल में इन क़ीमतों को खुले तौर पर ढूँढता है। जो जाँच सिर्फ़ कोड पढ़ती, उसे कुछ भी न दिखता।
साथ रखी गई लाइब्रेरियाँ
घर का नियम है शून्य निर्भरता। कोई लाइब्रेरी अपवाद के तौर पर साथ रखी जा सकती है, जब कोड हाथ से लिखना बेतुका हो: कभी किसी तीसरे के सर्वर से नहीं, हमेशा जमे हुए संस्करण में, लाइसेंस जाँचा हुआ और वज़न यहीं बताया हुआ।
@cantoo/pdf-lib 2.8.1
le coin PDF · Licence MIT · 661.4 KB
Écrire un PDF à la main est déraisonnable : c'est un format d'objets indirects, de tables de références croisées et de flux compressés, et une erreur d'un octet rend le fichier illisible. C'est l'exception que la doctrine autorise, et c'est la seule. Cette bibliothèque est le prolongement MAINTENU de pdf-lib, dont la dernière version date de novembre 2021 : nous avons choisi le code vivant. La version est figée dans le nom du fichier, la licence MIT est servie à côté, et le code est là, chez nous : les pages du coin PDF le chargent depuis ce site, jamais depuis ailleurs. Nous avons vérifié une chose de plus, à la machine : ce fichier ne contient AUCUN appel réseau, pas un seul, et le verrou du contenu le re-vérifie à chaque build.
तालिका के स्रोत
तालिका की हर पंक्ति किसी सार्वजनिक स्रोत से जाँची गई है। वे यह रहे, ताकि यह जाँच हमारे बिना दोबारा की जा सके।
- तस्वीर के फ़ॉर्मैट की गाइड (MDN)
https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types - कैनवस से WebP लिखना: समर्थन की तालिका
https://caniuse.com/mdn-api_htmlcanvaselement_toblob_type_parameter_webp - canvas.toBlob (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob - ब्राउज़र की अपनी दबाई: अब हर ब्राउज़र में (web.dev)
https://web.dev/blog/compressionstreams - ब्राउज़र का अपना एन्क्रिप्शन, SubtleCrypto (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto - बारकोड पढ़ना, Barcode Detection API (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Barcode_Detection_API - “इस नाम से सहेजें” खिड़की, showSaveFilePicker (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker - स्क्रीन से बाहर काम, OffscreenCanvas (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas - अलग-अलग फ़ॉर्मैट में EXIF की दिशा
https://zpl.fi/exif-orientation-in-different-formats/ - WebP का डिब्बा (विशिष्टि)
https://developers.google.com/speed/webp/docs/riff_container - pdf-lib: यह लाइब्रेरी क्या-क्या कर सकती है
https://github.com/Hopding/pdf-lib - iOS पर कैनवस के क्षेत्रफल की सीमा
https://pqina.nl/blog/canvas-area-exceeds-the-maximum-limit/ - कैनवस को फ़ाइल में बदलना (HTML मानक)
https://html.spec.whatwg.org/multipage/canvas.html - पासवर्ड रखने के सुझाए गए मानक (OWASP)
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html - पासवर्ड से चाबी बनाना (NIST SP 800-132)
https://csrc.nist.gov/pubs/sp/800/132/final - ब्राउज़र के इंटरफ़ेस से एन्क्रिप्ट करना, SubtleCrypto.encrypt (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt - धारा में एन्क्रिप्शन: वह माँग जो खुली पड़ी है (W3C)
https://github.com/w3c/webcrypto/issues/73 - ब्राउज़र की अपनी दबाई: समर्थन की तालिका (CompressionStream)
https://caniuse.com/mdn-api_compressionstream_compressionstream - ZIP फ़ाइल फ़ॉर्मैट (PKWARE विशिष्टि)
https://pkware.cachefly.net/webdocs/APPNOTE/APPNOTE-6.3.2.TXT - ICO आइकन फ़ॉर्मैट, और उसके अंदर का PNG
https://devblogs.microsoft.com/oldnewthing/20101022-00/?p=12473 - क्या PDF लाइब्रेरी अब भी चालू है? (चर्चा)
https://github.com/Hopding/pdf-lib/discussions/1631 - PDF लाइब्रेरी की सँभाली जा रही अगली कड़ी
https://github.com/cantoo-scribe/pdf-lib - बारकोड पढ़ना: असली समर्थन का मतलब क्या है
https://developer.chrome.com/docs/capabilities/shape-detection - ISO 32000 मानक में Adobe का जोड़: एक्सटेंशन 3 का AESV3 एन्क्रिप्शन
https://www.loc.gov/preservation/digital/formats/fdd/fdd000313.shtml - pdf.js: PDF के AES-256 एन्क्रिप्शन के दोनों रिवीज़न का कोड
https://github.com/mozilla/pdf.js/blob/master/src/core/crypto.js - PDFium: Chrome के इंजन की AES-256 पासवर्ड जाँच
https://github.com/chromium/pdfium/blob/main/core/fpdfapi/parser/cpdf_security_handler.cpp - ISO 32000-1 मानक: वस्तुओं की धाराएँ (§7.5.7) और तस्वीरें (§8.9.5)
https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf - qpdf: रिवीज़न 5 सिर्फ़ अनुकूलता जाँचने के काम क्यों आना चाहिए
https://qpdf.readthedocs.io/en/stable/encryption.html