কীভাবে কাজ করে
এই সাইট যা করে তা কারিগরি দিক থেকে সাধারণ ব্যাপার। বিরল যেটা, তা হল আপনার ফাইল কখনও না নিয়েই সেটা করা, আর সীমাগুলি ঠিক কোথায় তা স্পষ্ট করে বলা।
বানানোর চারটি নিয়ম
ফাইল ডিভাইস ছেড়ে যায় না
ব্রাউজার একটি ফাইল পড়তে, ডিকোড করতে, বদলাতে আর একটি ডাউনলোড বানাতে পারে। সবটাই সেখানেই ঘটে। কিছু গ্রহণ করে এমন কোনো সার্ভার নেই, কারণ সাইটটি কতগুলি স্থির ফাইলের সমষ্টি।
নেটওয়ার্কের উপরে শূন্য নির্ভরতা
কোনো তৃতীয় পক্ষ থেকে লাইব্রেরি লোড করা হয় না, দূরের কোনো ফন্ট নেই, দূরের কোনো ছবি নেই, ভিতরে বসানো কোনো পরিসংখ্যান-মাপক নেই। পাতাটি যা যা লোড করে সবই এই ডোমেইন থেকে আসে, আর তার বাইরে কিছুই লোড হয় না।
কোড পড়া যায়
কিছুই কমপ্রেস করা বা ঘুলিয়ে দেওয়া নয়। একটি সরঞ্জাম মানে একটি ফাইল, নিজের নামেই নাম। এই কারণেই, যিনি সাইটটি লেখেননি তিনিও তা যাচাই করতে পারেন।
প্রতিটি সরঞ্জাম তার নিজের ফরম্যাট আর নিজের সীমা ঘোষণা করে
কখনও “সব ফরম্যাট” নয়। ব্রাউজার যে ফরম্যাট খুলতে পারে না, প্রথম পাতায় লিখে দিলেই তা সম্ভব হয়ে যায় না।
সামঞ্জস্যের ছক
প্রথম সরঞ্জামটি লেখার আগেই চালানো একটি যাচাই-অভিযানের ফল এটি, আর এতে তারিখ দেওয়া আছে। ব্রাউজার বদলায়: প্রতিটি পুনর্বিবেচনায় ছকটি নতুন করে যাচাই করা হয়, আগেরটা কপি করা হয় না।
সামঞ্জস্য যাচাই করা হয়েছে July 30, 2026 তারিখে
ব্রাউজার যেসব ছবির ফরম্যাট খুলতে জানে
একটি সরঞ্জাম আপনার ফাইলটি দেখাতে আর তা নিয়ে কাজ করতে পারবে কি না, তা এখানেই ঠিক হয়। যে ফরম্যাট এই তালিকায় নেই, সেটি “শিগগিরই আসছে” নয়: সেটি নেই।
| Chrome, Edge | Firefox | Safari (macOS, iOS) | |
|---|---|---|---|
| JPEG (.jpg) | yes | yes | yes |
| PNG (.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 |
| একমাত্র Safari-ই TIFF দেখায়। অন্যদিকে 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-এর রূপটি, একমাত্র যেটি একটি zip বানাতে লাগে, বাকিগুলির চেয়ে পরে এসেছে (Chrome 103, Firefox 113, Safari 16.4)। তাই 2020 থেকে 2022-এর মধ্যে লেখা zip-এর কোড এমন একটি 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 কোডের সরঞ্জামই এর উপরে দাঁড়াতে পারে না: নিজের পড়ার ব্যবস্থাটি ভিতরে রাখতে হত। | |||
| সত্যিকারের “Save as” জানালা দিয়ে সংরক্ষণ করা | yes | no | no |
| কেবল Chromium-এই; Firefox আর Safari এই ইন্টারফেসটি নিতে রাজি হয়নি। শেষ ভরসা হল চেনা ডাউনলোড, যা সব জায়গায় চলে: তাই আমাদের সরঞ্জামগুলি স্বাভাবিক অবস্থায় সেটিই ব্যবহার করে। | |||
| একটি ফাইল টুকরো টুকরো করে হ্যাশ করা | no | no | no |
| ব্রাউজার SHA-256 হ্যাশ দিব্যি হিসাব করে, কিন্তু কেবল একবারে দেওয়া গোটা একটি ফাইলের উপরেই: তাকে ধাপে ধাপে খাওয়ানোর কোনো ফাংশনই নেই। এতেই হ্যাশের সরঞ্জামটির উপরে একটি ওজনের সীমা চেপে বসে, আর সেই সীমাটি এই কারণটিই বয়ে চলে। | |||
| গোটা ফাইল না নিয়ে স্রোতে একটি ফাইল এনক্রিপ্ট করা | no | no | no |
| হ্যাশ করার মতোই একই সীমা: ব্রাউজারের এনক্রিপশন একটি সম্পূর্ণ ব্লকের উপরেই কাজ করে, আর স্রোতে কাজ করা একটি রূপের দাবিটি 2016 সাল থেকে কোনো উত্তর ছাড়াই খোলা পড়ে আছে। নিজে থেকে টুকরো করা যায় বটে, কিন্তু তখন প্রতিটি টুকরোকে তার অবস্থানের সঙ্গে বেঁধে দিতে হয়, নইলে সিলমোহরের অজান্তেই তার কিছু টুকরো সরিয়ে দেওয়া বা সাজিয়ে দেওয়া যায়। আমাদের এনক্রিপশনের সরঞ্জামটি এই ধরনের একটি গঠন তখনই বানিয়ে ফেলার বদলে একটি সৎ ওজনের সীমা ঘোষণা করাই ভালো মনে করে। | |||
| ব্রাউজারের ভিতরে আধুনিক চাবি তৈরি (Argon2) | no | no | no |
| একটি পাসওয়ার্ড থেকে চাবি বানাতে আজ প্রথম সুপারিশটি Argon2, আর সেটি কোনো ব্রাউজারেই নেই: একটি WebAssembly ইঞ্জিন ভিতরে রাখতে হত। তাই আমাদের এনক্রিপশনের সরঞ্জামটি SHA-256 সহ PBKDF2 আর 600000 পাস ব্যবহার করে, অর্থাৎ এই ক্ষেত্রের আদর্শ সূত্রটির 2026 সালে প্রকাশ করা মান, আর সে বেশি কিছু ভাবতে দেওয়ার বদলে সেটি পর্দায় দেখিয়েও দেয়। | |||
| একটি ক্যানভাস থেকে ICO আইকনের ফাইল লেখা | no | no | no |
| কোনো ব্রাউজারই ICO লিখতে জানে না: PNG ছবির চারপাশে কনটেইনারটি হাতে জুড়ে নিতে হয়। ICO-র ভিতরে PNG Windows Vista থেকে আর Firefox 9 থেকে মেনে নেওয়া হয়; Chrome, Edge আর Safari-র জন্য আমরা কেবল ব্যবহারের প্রমাণই পেয়েছি, প্রকৌশলের কোনো সূত্র পাইনি। আইকন বানানোর কোনো সরঞ্জামের প্রতিশ্রুতি দেওয়ার আগে কথাটা জেনে রাখা দরকার। | |||
| একটি CRC-32 হিসাব করা, যা zip-এ বাধ্যতামূলক | no | no | no |
| ব্রাউজার কেবল ক্রিপ্টোগ্রাফিক হ্যাশই দেয় (SHA-1 আর SHA-2)। একটি zip ফাইল তার প্রতিটি হেডারে যে CRC-32 দাবি করে সেটি তাই হাতেই লিখতে হয়, সাধারণ JavaScript-এ। গোনা তিরিশ লাইনেই সেটি করা যায়, আর কোনো লাইব্রেরি ছাড়া একটি zip বানাতে একমাত্র এই ইটটিই কম পড়ে। | |||
মেমরির সীমা, যেগুলি সত্যিই একটি ট্যাব ক্র্যাশ করায়
সেগুলি কোনো মানেই লেখা নেই, আর এই কারণেই এত বদলানোর যন্ত্র ফোনে চুপচাপ ক্র্যাশ করে। এই সাইটের প্রতিটি সরঞ্জাম নিজের সীমাটি ঘোষণা করে, আর তার বেশি হলে ভদ্রভাবে ফিরিয়ে দেয়।
| 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 নিয়ে কিছুই করতে জানে না, দেখানো ছাড়া। যেকোনো নাড়াচাড়ার জন্যই ভিতরে রাখা কোড লাগে, আর এই সাইটের নীতি একমাত্র এই ব্যতিক্রমটিই মানে। 2026 সালের 30 জুলাইয়ের যাচাইটি যা প্রতিষ্ঠা করেছে তা এই, আর 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 মেগাবাইট (ইন্টারফেসের জন্য 454669 বাইট, ওয়ার্কারের জন্য 1262398 বাইট), কমপ্রেস করার পরে প্রায় 502 কিলোবাইট। তাই “PDF থেকে ছবি” সরিয়ে রাখা হয়েছে, আর কথাটা লিখেও রাখা হয়েছে। | |||
| ব্রাউজারে একটি PDF AES-256-এ এনক্রিপ্ট করা, আর সেটি খোলা | yes | yes | yes |
| ভিতরে রাখা লাইব্রেরিটি দিয়ে সম্ভব, তবে কেবল সংস্করণ 5-এ (Adobe-র 2008 সালের সম্প্রসারণ), PDF 2.0 মানের সংস্করণ 6-এ নয়। সংস্করণ 5 পাসওয়ার্ডটি যাচাই করে SHA-256-এর একটিমাত্র পাসে; 6 একটি বারবার ঘোরানো হ্যাশ ব্যবহার করে, আর আক্রমণের সরঞ্জামগুলির প্রকাশ্য মাপ চেষ্টার গতিতে চার থেকে পাঁচ ঘরের তফাত দেখায়। PDF 2.0 মানটি একমাত্র সংস্করণ 5-কেই বাতিল বলে চিহ্নিত করে। অ্যালগরিদমটি ফাইলের হেডারের উপরে নির্ভর করে: মেপে দেখা গেছে, একমাত্র “1.7ext3” সারিটিই AES-256 চালু করে, নইলে RC4 বা AES-128 পাওয়া যায়। | |||
| ব্রাউজারের ভিতরের পাঠকে AES-256 সংস্করণ 5-এ এনক্রিপ্ট করা একটি PDF খোলা | yes | yes | partly |
| ইঞ্জিনগুলির সোর্স কোডেই যাচাই করা: PDFium (Chrome, Edge) তার পাসওয়ার্ড যাচাইয়ের সময় থেকেই সংস্করণ 5 সামলায়, আর pdf.js (Firefox) সংস্করণ 6-এর থেকে আলাদা করে সংস্করণ 5-এর জন্য নিজস্ব একটি ক্লাস বয়ে চলে। Adobe Acrobat সেটি 9 সংস্করণ থেকে খোলে। macOS আর iOS-এর প্রিভিউ আর Android-এর পাঠকগুলির জন্য প্রথম হাতের একটিও সূত্র পাওয়া যায়নি: তাই Safari-র ঘরটিতে “আংশিক” লেখা, আর সাইটটি তার বেশি কিছুই দাবি করে না। | |||
| ফন্ট ইঞ্জিন ভিতরে না রেখে একটি PDF-এ উচ্চারণচিহ্নওয়ালা বা লাতিন নয় এমন লেখা লেখা | partly | partly | partly |
| যেকোনো নিজস্ব ফন্টের জন্য লাইব্রেরিটি যে ফন্ট ইঞ্জিনটি দাবি করে (আর যেটি আমরা ভিতরে রাখি না) সেটি ছাড়া কেবল PDF-এর 14টি মানক ফন্টই থাকে, Windows-1252-তে: প্রায় 218টি লাতিন অক্ষর। এই সেটের বাইরের কোনো অক্ষর সরবরাহ করা সংস্করণে কোনো ভুলও তোলে না: কোডটি ব্যতিক্রমটি ধরে ফেলে আর একটি প্রশ্নচিহ্ন লিখে দেয়। তাই যে সরঞ্জাম লেখা লেখে তাকে ঢোকার লেখাটি যাচাই করতে হয় আর সে যা লিখতে জানে না তার নাম বলে দিতে হয়। এর সোজা ফল: বাংলা, দেবনাগরী, আরবি, সিরিলিক, গ্রিক বা চিনা লেখা একটি PDF-এ লেখা যায় না। | |||
| একটি PDF-এর ছাপা বা কপি করা সত্যিই আটকে দেওয়া | no | no | no |
| ফরম্যাটটি এই নিষেধাজ্ঞাগুলি ফাইলে লিখে রাখার সুযোগ দেয়, কিন্তু ওগুলি পাঠকের কাছে করা অনুরোধ ছাড়া কিছুই নয়: খোলামাত্রই ভিতরের জিনিস ডিক্রিপ্ট হয়ে যায়, আর যে পাঠক অনুরোধটি গ্রাহ্য করে না সে ঠিকই ছেপে দেয়। কোনো সরঞ্জামই এর চেয়ে ভালো করতে পারে না, স্থানীয় হোক বা দূরের। তাই সাইটটি এই ঘরগুলি দেয় না। | |||
আমরা কী বাদ দিয়েছি, আর কেন
যে সাইট নিজের সীমা নিয়ে সৎ, সে সব প্রতিশ্রুতি দেওয়া সাইটের চেয়ে বেশি কাজে লাগে। আমরা যা যা না করার সিদ্ধান্ত নিয়েছি তা এখানে দেওয়া হল, প্রতিটির কারণসহ। কারণ বদলালে তবেই এই লাইনগুলি বদলাবে।
- ছবির ভিতরের লেখা চিনে নেওয়া, আর iPhone-এর HEIC ছবি পড়া: এর জন্য যে ইঞ্জিনগুলি লাগে সেগুলির ওজন দশ থেকে পনেরো মেগাবাইট। দুর্বল সংযোগে কিছু লেখা পড়ার জন্য পনেরো মেগাবাইট ডাউনলোড করা লোকসানের কারবার। আবার ভেবে দেখা হবে, তবে চুপিচুপি কখনও নয়।
- ভিডিও, যেকোনো চেহারায়: ব্রাউজারের ভিতরে ভিডিও রূপান্তরের ইঞ্জিনগুলির ওজন প্রায় তিরিশ মেগাবাইট। না।
- কৃত্রিম বুদ্ধিমত্তা দিয়ে পটভূমি সরানো: এর জন্য একটি মডেল ডাউনলোড করতে হয়, আর মডেল মানে একটি ভারী, অস্বচ্ছ ফাইল। না।
- প্রকৃতিগতভাবেই যার নেটওয়ার্ক লাগে সেসব কিছু: লিঙ্ক ছোট করা, ছোট লিঙ্ক খুলে দেখা, ডোমেইনের মালিক কে তা জিজ্ঞেস করা, দূরের কোনো পাতার ঝলক দেখানো। ওই সরঞ্জামগুলি স্থানীয় হতে পারে না, তাই ওগুলি এখানে নেই। এটি কোনো ঘাটতি নয়, এটিই প্রকল্পের সংজ্ঞা।
- ছবি কোথায় তোলা তা দেখাতে মানচিত্র খোলা: এটিই হত সাইটের একমাত্র বাইরে যাওয়া রিকোয়েস্ট, আর সেটি বয়ে নিয়ে যেত ফাইলের সবচেয়ে স্পর্শকাতর তথ্যটি। অবস্থানের মানগুলি সরাসরি দেখানো হয়, সেগুলি নিয়ে কী করবেন তা আপনারই সিদ্ধান্ত।
- PDF থেকে ছবি বানানো: এর জন্য পাতাগুলি এঁকে ফেলতে হত, আর PDF আঁকা গোটা একটা পেশা (ফন্ট, ভেক্টর, স্বচ্ছতা, রঙের পরিসর)। আমরা যে লাইব্রেরিটি ভিতরে রেখেছি সেটি PDF বানাতে জানে, তার একটি পাতা এঁকে দিতে জানে না। ওয়েবের একমাত্র গুরুত্বপূর্ণ রেন্ডারিং ইঞ্জিনটির ওজন, তার প্রকাশিত ফাইলগুলিতে মেপে দেখা গেছে, এই একটিমাত্র কাজের জন্য 1.72 মেগাবাইট। উল্টো দিকটি, অর্থাৎ ছবি থেকে PDF, টেবিলে রাখা আছে আর চলে।
- PDF-এ সই করা: একই কারণে, আর এটিই সবচেয়ে হতাশার। রেন্ডারিং ইঞ্জিন ছাড়া পাতাটি দেখানোই যায় না; আর না দেখাতে পারলে কাউকে তার পছন্দমতো জায়গায় সই বসাতে দেওয়া যায় না। চোখ বুজে একটি নির্দিষ্ট জায়গায় ফেলে দেওয়া সই অকেজোর চেয়েও খারাপ হত। একটি নথি নষ্ট করে এমন সরঞ্জামের চেয়ে আমরা বরং জায়গাটি খালি রাখব।
- QR কোড পড়া: ব্রাউজার যে সুবিধাটি দেয় তা অপারেটিং সিস্টেমের উপরে দাঁড়িয়ে। তাই তা আছে শুধু Chromium-এর একটি অংশে, macOS, ChromeOS আর Android-এ; Windows আর Linux-এ তা নেই, Firefox কখনও তা বানায়নি, আর Safari-র পরীক্ষামূলক সংস্করণটি iOS 18 থেকে ভাঙা। এর উপরে দাঁড়ানো সরঞ্জাম ডেস্কটপের বেশির ভাগ দর্শকের কাছেই চলত না। উল্টো দিকে QR কোড বানানো নকশাতেই আছে: তা হাতে করা যায়, আর মানটি ব্যবহারের জন্য মুক্ত।
- PDF ছাপা বা কপি করা নিষেধ করা: ফরম্যাটটি তা করতে দেয়, আর অনেক সরঞ্জামই ওই ঘরগুলি দেখায়, কারণ ওতে ভরসা লাগে। ওগুলি আসলে পাঠকের কাছে করা অনুরোধ ছাড়া কিছু নয়: খোলার সঙ্গে সঙ্গেই ভিতরের লেখা ডিক্রিপ্ট হয়ে যায়, আর যে পাঠক অনুরোধটি গ্রাহ্য করে না সে দিব্যি ছেপে ফেলে। স্টিকারকে তালা বলে বেচা ঠিক সেই ধরনের মিথ্যে হত, যা না বলার জন্যই এই সাইটটির জন্ম।
- মাইক্রোফোন দিয়ে রেকর্ড করা, অর্থাৎ 34 নম্বর জায়গার “ডিক্টাফোন” অংশটি: এই সাইটের সরঞ্জামের পাতার গড়ন প্রতিটি সরঞ্জামের জন্য একটিমাত্র ইনপুট দেয়, একটি ফাইল, একটি লেখা বা কিছুই না, আর প্রতিটি ভরসার ব্যানার ঠিক ওই ইনপুটটির কথাই বলে। মাইক্রোফোন হত চতুর্থ একটি ইনপুট, তার নিজের প্রতিশ্রুতি লিখতে হত। সবচেয়ে বড় কথা, প্রতিটি প্রকাশের আগে যে যন্ত্র এই সাইট যাচাই করে তার কোনো মাইক্রোফোন নেই: তাই একটি রেকর্ডিং যে বাইরে যায় না তা আমরা প্রমাণ করতে পারতাম না, আর যে প্রতিশ্রুতি আমরা পরখ করতে জানি না তা আমরা প্রকাশ করি না। তাই 34 নম্বর জায়গাটি হল “রেকর্ডিং ছেঁটে নেওয়া”, আর রেকর্ডিংয়ের কাজটি আপনার ডিভাইস যেমন ভালো পারে তেমনই পারতে থাকে।
- ক্লাসঘরের টাইমারের জন্য প্রোজেক্টরের বিরাট পর্দার প্রদর্শন: আমাদের নকশার নিয়মে সবচেয়ে বড় অক্ষরটি আছে গণনার ঘরগুলিতে, আর তা ঘরের পিছন থেকে পড়ার জন্য আঁকা হয়নি। বিরাট প্রদর্শন হত একটি নতুন নকশার উপাদান, নকশা এখন জমাট, আর যা নেই তা একটি সরঞ্জামের মাঝপথে বানিয়ে না নিয়ে টুকে রাখা হয়। পূর্ণ পর্দার মোড আছে আর তা গোটা পর্দা জুড়ে থাকে, কিন্তু তা অঙ্কগুলি বড় করে না, আর পাতাটি সেটি দুবার বলে। এটি একটি অনুরোধ, তা টুকে রাখা আছে, চাপা দেওয়া হয়নি।
- এলোমেলো নির্বাচনের ঘোরানো চাকা, একই কারণে: এটি এমন একটি উপাদান যা নকশায় নেই। আর চাকা কোনো নির্বাচনকে ন্যায্য করে না, তাকে শুধু নাটকীয় করে তোলে। নির্বাচনকে ন্যায্য করে তার পিছনের এলোমেলো সংখ্যার উৎস আর পক্ষপাতের অনুপস্থিতি, আর সরঞ্জামটি হিসাবসহ দুটিই দেখায়: n-এর মধ্যে একটি সুযোগ, n ফ্যাক্টোরিয়াল সম্ভাব্য ক্রম।
- তারিখ হিসাবের সরঞ্জামে ক্লিক করা যায় এমন ক্যালেন্ডার: আমাদের নকশায় তারিখের ঘর আঁকা নেই, আর ব্রাউজারের নিজের তারিখের ঘরটি নিজের সীমানা আর নিজের উচ্চতা নিয়ে এসে হাজির হত, নকশার বাইরে। তাই তারিখ লিখতে হয় আন্তর্জাতিক ছকে, আর তাতে একটি সত্যিকারের সুবিধা আছে: “03/04” পৃথিবীর অর্ধেকের কাছে 3 এপ্রিল আর বাকি অর্ধেকের কাছে 4 মার্চ।
- তারিখ হিসাবের সরঞ্জামে সরকারি ছুটি: দেশে দেশে তা আলাদা, কখনও একই দেশের অঞ্চলে অঞ্চলেও আলাদা, প্রতি বছর তারিখ বদলায়, আর ছুটি সপ্তাহান্তে পড়লে প্রায়ই আলাদা করে ঠিক করা একটি বিকল্প দিন দেওয়া হয়। জমাট তালিকা বারো মাসেই ভুল হয়ে যেত, আর এই প্রকল্প গোটা পৃথিবীর মানুষের জন্য। তাই কাজের দিন গোনা হয় সোমবার থেকে শুক্রবার, ব্যতিক্রম ছাড়াই, আর তা পাতায় লেখাও আছে।
- একক বদলানোর সরঞ্জামে ছাপার Didot বিন্দু, আর বাদ দেওয়াগুলির মধ্যে এটিই সবচেয়ে বেশি কথা বলে: কোনো মেট্রোলজি সংস্থা একে সংজ্ঞায়িত করে না, আর যেসব বই একে উদ্ধৃত করে তারা চারটি আলাদা মান দেয়। যখন চারটি গৌণ উৎস পরস্পরের বিরোধিতা করে আর প্রথম হাতের কোনো উৎস নেই, তখন কপি করার মতো কিছুই থাকে না। উল্টো দিকে ওয়েবের বিন্দুটি ঠিক এক ইঞ্চির বাহাত্তর ভাগের এক ভাগ, আর তা একটি স্পেসিফিকেশনে সাদা কাগজে কালো অক্ষরে লেখা আছে।
- 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 কিলোবাইট
É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 - নিজস্ব এনক্রিপশন (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto - বারকোড পড়া (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Barcode_Detection_API - “Save as” জানালা (MDN)
https://developer.mozilla.org/en-US/docs/Web/API/Window/showSaveFilePicker - পর্দার বাইরে কাজ (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 - পাসওয়ার্ড জমা রাখা: সুপারিশ করা মানগুলি
https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html - একটি পাসওয়ার্ড থেকে চাবি বানানো (NIST SP 800-132)
https://csrc.nist.gov/pubs/sp/800/132/final - ব্রাউজারের ইন্টারফেস দিয়ে এনক্রিপ্ট করা
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt - স্রোতে এনক্রিপ্ট করা: খোলা পড়ে থাকা দাবিটি
https://github.com/w3c/webcrypto/issues/73 - নিজস্ব কমপ্রেশন: সমর্থনের ছক
https://caniuse.com/mdn-api_compressionstream_compressionstream - ZIP ফাইল ফরম্যাট (মান)
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