दस्तावेज़ों को अपलोड किए बिना स्कैन करें
पासपोर्ट, कॉन्ट्रैक्ट, सैलरी स्लिप, मेडिकल रिपोर्ट। जिन दस्तावेज़ों को स्कैन करने की ज़रूरत सबसे ज़्यादा पड़ती है, उन्हीं को किसी अनजान सर्वर के हवाले करना सबसे कम समझदारी है। ScanPDF इसी सोच से बनाया गया है कि उन्हें किसी को सौंपना ही न पड़े।
आम ऑनलाइन कन्वर्टर क्या करता है
आम "फ़ोटो से PDF" वाली साइट असल में एक सर्वर के आगे लगा वेब फ़ॉर्म होती है। आपकी फ़ाइल अपलोड होती है, किसी ऐसी जगह कन्वर्ट होती है जिसे आप देख नहीं सकते, और फिर डाउनलोड के लिए वापस दे दी जाती है। शर्तों में कहीं यह वादा लिखा होता है कि उसे एक घंटे या एक दिन बाद डिलीट कर दिया जाएगा।
हो सकता है वह वादा निभाया भी जाए। लेकिन वह एक वादा है, कोई पक्का इंतज़ाम नहीं, और उसमें वे बातें शामिल नहीं जो आपको कभी बताई ही नहीं गईं: फ़ाइल कितनी मशीनों से होकर गुज़री, क्या-क्या लॉग हुआ, बैकअप किस थर्ड-पार्टी कंपनी के पास रखा गया, या आगे कभी डेटा लीक हुआ तो क्या बाहर आएगा। पहचान पत्र या दस्तख़त किए हुए कॉन्ट्रैक्ट के मामले में ईमानदारी की बात यही है कि अपलोड पूरा होते ही आगे क्या होगा, यह आपके हाथ में नहीं रहता।
ScanPDF इसकी जगह क्या करता है
यहां अपलोड वाला कोई स्टेप नहीं है, क्योंकि अपलोड करने के लिए कोई जगह ही नहीं है। ScanPDF एक स्टैटिक पेज है। आपका ब्राउज़र फ़ोटो को डिस्क से पढ़ता है, और उसके बाद सब कुछ उसी टैब में होता है:
- किनारों की पहचान OpenCV के WebAssembly बिल्ड पर चलती है, यानी आपके ही CPU पर।
- पर्सपेक्टिव करेक्शन और फ़िल्टर मेमोरी में रखी फ़ुल-रेज़ोल्यूशन इमेज पर लगाए जाते हैं।
- PDF आपके डिवाइस पर ही बनती है, pdf-lib की मदद से, और ब्राउज़र को एक आम डाउनलोड की तरह सौंप दी जाती है।
कोई भी रिक्वेस्ट आपकी इमेज का डेटा लेकर नहीं जाती, क्योंकि कोड में ऐसी कोई रिक्वेस्ट है ही नहीं। ऐप एक बार लोड हो जाए तो इंटरनेट बंद करके भी सब कुछ चलता रहता है। किसी दूसरे ऐप से शेयर करें और फिर ScanPDF चुनकर भेजी गई फ़ोटो भी डिवाइस के अंदर ही सौंपी जाती हैं: उस रिक्वेस्ट का जवाब ऐप का service worker खुद देता है, और कुछ भी बाहर नहीं भेजा जाता। एक ख़ास स्थिति जान लेना ठीक रहेगा: अगर Android पर ऐप इंस्टॉल रहते हुए आप साइट का डेटा मिटा देते हैं, तो अगली बार शेयर की गई फ़ोटो लेने के लिए डिवाइस पर कुछ नहीं बचता, और ब्राउज़र वे फ़ोटो वेब होस्ट को भेज देता है, जो उन्हें स्वीकार नहीं करता। डेटा मिटाने के बाद ऐप को एक बार खोल लें, फिर शेयर करना दोबारा डिवाइस तक ही सीमित रहता है।
सिर्फ़ दावा नहीं, आप ख़ुद जांच सकते हैं
प्राइवेसी का जो दावा आप जांच न सकें, उसकी क़ीमत बहुत कम है। इसलिए इस दावे को तीन तरह से जांचा जा सकता है।
- ख़ुद देख लें। अपने ब्राउज़र के डेवलपर टूल खोलें, Network टैब पर जाएं और कोई दस्तावेज़ स्कैन करें। ऐप की अपनी फ़ाइलें लोड होने के बाद आगे कुछ नहीं भेजा जाता।
- सोर्स कोड पढ़ें। पूरा ऐप MIT लाइसेंस के तहत GitHub पर मौजूद है - सादे JavaScript मॉड्यूल की कुछ सौ लाइनें, बीच में कोई बिल्ड स्टेप नहीं जो उन्हें छिपा दे, और सिर्फ़ दो डिपेंडेंसी जो URL और SHA-256 से पिन की गई हैं।
- ब्राउज़र से लागू करवाएं। ख़ुद होस्ट किए जाने वाले कंटेनर में सख़्त
Content-Security-Policyहोती है, जो कनेक्शन को सिर्फ़ उसके अपने ओरिजिन तक सीमित रखती है। इसके रहते किसी बाहरी होस्ट को ग़लती से गई रिक्वेस्ट सिर्फ़ कोड से ग़ायब नहीं होती, ब्राउज़र उसे ब्लॉक कर देता है।
होस्टेड डेमो बनाम ख़ुद होस्ट करना
इस फ़र्क़ को साफ़-साफ़ बताना ज़रूरी है, क्योंकि ज़्यादातर साइटें ऐसा नहीं करतीं।
scanpdf.io पर चल रहा डेमो वही कोड है, जो GitHub Pages से सर्व होता है। वहां भी प्रोसेसिंग पूरी तरह आपके ब्राउज़र में होती है, और आपके दस्तावेज़ तब भी आपके डिवाइस से बाहर नहीं जाते। फ़र्क़ इसमें है कि रिस्पॉन्स हेडर किसके हाथ में हैं: GitHub Pages पर वे GitHub के हाथ में हैं, इसलिए प्रोजेक्ट के अपने nginx कॉन्फ़िग वाली सख़्त CSP वहां लागू नहीं होती। साथ ही, GitHub को पेज के लिए आई आम वेब-सर्वर रिक्वेस्ट दिखती है, जैसे किसी भी होस्ट को दिखती।
अगर आप चाहते हैं कि यह गारंटी सिर्फ़ इस भरोसे पर न टिकी हो कि कोड वही है जो वह बताता है, बल्कि ब्राउज़र उसे लागू करे, तो इसे ख़ुद चलाएं। एक कमांड से कंटेनर शुरू हो जाता है, और चलते समय उसे नेटवर्क की बिल्कुल ज़रूरत नहीं पड़ती।
न अकाउंट, न टेलीमेट्री, न कुकीज़
यहां साइन-अप करने जैसा कुछ है ही नहीं, इसलिए किसी का ईमेल पता भी कहीं दर्ज नहीं है। न कोई एनालिटिक्स स्क्रिप्ट है, न ट्रैकिंग पिक्सेल, न एरर रिपोर्टिंग सर्विस और न A/B टेस्टिंग फ़्रेमवर्क। ऐप कोई कुकी सेट नहीं करता। आपके डिवाइस पर यह सिर्फ़ इतना रखता है: थीम और पेज साइज़ जैसी इंटरफ़ेस की पसंद, ऐप की अपनी फ़ाइलों की एक कॉपी ताकि वह ऑफ़लाइन खुल सके, और थोड़ी देर के लिए किसी दूसरे ऐप से शेयर की गई फ़ोटो, जो स्कैनर खुलते ही मिटा दी जाती हैं। आपके पेज सिर्फ़ मेमोरी में रहते हैं; पेज रीलोड करते ही सेशन का हर निशान मिट जाता है।
यह कोई पॉलिसी कम, आर्किटेक्चर ज़्यादा है। बिना बैकएंड वाले स्टैटिक पेज के पास वह डेटा रखने की कोई जगह ही नहीं होती जिसका वह ग़लत इस्तेमाल कर सके।
आज़माकर देखें
स्कैनर खोलें और उसमें कोई ऐसा दस्तावेज़ डालें जिसे आप कहीं और अपलोड नहीं करते। असल बात यही तो है। अगर काग़ज़ की फ़ोटो लेना आपके लिए नया है, तो स्कैनिंग गाइड में बताया गया है कि पहली ही बार में साफ़ नतीजा कैसे पाएं।