فرمت فایل PDF تشریح شد: ساختار، لایهها و استانداردها
واقعاً درون یک PDF چیست؟ نمودار و واژهنامه با برچسب که چهار بخش فیزیکی (هدر، بدنه، xref، تریلر)، شش لایه محتوا (متن، تصاویر، فونتها، حاشیهنویسیها، وکتورها، امضاها)، فراداده و استانداردهای ISO (PDF/A، PDF/X، PDF/UA، PDF/E، PDF/VT) ساخته شده بر روی آن را پوشش میدهد.
یک PDF یک چیز واحد نیست. بلکه یک کانتینر باینری با ساختار مشخص روی دیسک، مجموعهای از لایههای محتوا که درون آن کانتینر قرار گرفتهاند و خانوادهای از استانداردهای ISO که بر روی مشخصات پایه ساخته شدهاند. باز کردن آن در یک ویرایشگر هگز، ساختار را در خطوط اول به صورت متن ساده نشان میدهد. باز کردن آن در یک نمایشگر، لایهها را به صورت یک صفحه واحد رندر میکند.
این راهنما یک مرجع برچسبگذاری شده است: ساختار فیزیکی فایل، لایههای محتوایی که بدنه نگه میدارد، فرادادهای که همه چیز را احاطه کرده و استانداردها (PDF/A، PDF/X، PDF/UA، PDF/E، PDF/VT) که آن را برای موارد استفاده خاص محدود میکنند.

میخواهید از این نمودار در وبلاگ خود استفاده کنید؟ کد جاسازی زیر را کپی کنید:
چهار بخش فیزیکی
هر PDF روی دیسک، ساختار چهار قسمتی یکسانی دارد، به این ترتیب:
۱. هدر
خط اول فایل. همیشه با %PDF- و سپس شماره نسخه شروع میشود:
%PDF-1.7نسخهها از 1.0 (منتشر شده در ۱۹۹۳) تا 2.0 (منتشر شده در ۲۰۱۷، فعلی) متغیر هستند. هدر با یک خط کامنت حاوی بایتهای باینری دنبال میشود که به ابزارهای انتقال مانند FTP سیگنال میدهد که این یک فایل باینری است.
۲. بدنه - اشیاء غیرمستقیم
بخش عمده فایل. هر صفحه، فونت، تصویر و فیلد فرم یک شیء غیرمستقیم شمارهگذاری شده است:
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 /Parent 2 0 R /Contents 4 0 R /Resources << ... >> >>
endobjهر شیء دارای یک شناسه (شماره قبل از 0 obj)، یک شماره نسل (0، که برای بهروزرسانیهای افزایشی استفاده میشود) و یک محموله بین << و >> برای دیکشنریها یا stream و endstream برای جریانهای باینری (دادههای تصویر، دادههای فونت، محتوای فشرده) است.
اشیاء با سینتکس <id> <gen> R به یکدیگر ارجاع میدهند (مثلاً 3 0 R به معنی "شیء ۳، نسل ۰" است). اینگونه است که یک صفحه به فونت مورد استفاده خود ارجاع میدهد، یا یک کاتالوگ به ریشه درخت صفحات ارجاع میدهد.
۳. جدول ارجاع متقابل (xref)
یک جدول جستجوی آفست بایت. برای هر شیء در بدنه، xref موقعیت بایت مطلق آن را در فایل ثبت میکند:
xref
0 6
0000000000 65535 f
0000000017 00000 n
0000000089 00000 n
0000000172 00000 n
0000000299 00000 n
0000000453 00000 nاین همان چیزی است که PDF ها را قابل دسترسی تصادفی میکند. یک نمایشگر میتواند xref را بخواند، مستقیماً به آفست بایت شیء ۳ بپرد و آن صفحه را بدون تجزیه و تحلیل بقیه فایل رندر کند. دلیل اینکه PDF های یک فصل به صورت فوری باز میشوند، حتی زمانی که فایل منبع ۵۰۰ صفحه است.
۴. تریلر
آخرین بخش. به تجزیهکننده میگوید که کجا xref را پیدا کند و کدام شیء ریشه است:
trailer
<< /Size 6 /Root 1 0 R /Info 7 0 R >>
startxref
1893
%%EOFمقدار startxref آفست بایت جدول xref است. نشانگر %%EOF پایان واقعی فایل است. تریلرها همان چیزی هستند که بهروزرسانیهای افزایشی را ممکن میسازند: افزودن یک xref + تریلر جدید در انتها به شما امکان میدهد اشیاء را بدون بازنویسی کل فایل اضافه کنید.
شش لایه محتوا
درون بدنه، محتوا در شش نوع لایه ذخیره میشود. هر صفحه PDF رندر شده، ترکیبی از این لایهها است:
۱. متن
دستورات موقعیت گلیف و ارجاعات فونت، نه رشتههای متنی. یک PDF دستوراتی مانند "گلیف ۴۲ را از فونت F3 در موقعیت (۱۲۰۰، ۵۴۰) رسم کن" را ذخیره میکند، نه "حرف A را اینجا رسم کن". به همین دلیل متن قابل انتخاب و جستجو است: نمایشگر با استفاده از نگاشت ToUnicode (یا CMap برای فونتهای CJK) شناسه گلیف را به نقاط کد یونیکد نگاشت معکوس میکند.
وقتی متنی فاقد نگاشت ToUnicode باشد، مشکل کلاسیک "PDF با متن قابل انتخاب که هنگام کپی شدن خراب میشود" را تجربه میکنید. متن قابل مشاهده است، اما نگاشت گلیف به یونیکد شکسته یا غایب است.
۲. تصاویر
به صورت جریانهای جاسازی شده در یکی از چندین فرمت ذخیره میشوند:
- JPEG (فیلتر DCTDecode): عکسها، رایجترین
- JPEG2000 (JPXDecode): فشردهسازی بالاتر، کمتر رایج
- معادل PNG (فیلتر FlateDecode + Predictor): اسکرینشاتها، خطوط گرافیکی
- CCITT Group 4 (CCITTFaxDecode): متن اسکن شده سیاه و سفید، در اسکنهای آرشیوی استفاده میشود
- JBIG2 (JBIG2Decode): تصاویر دوبعدی، رایج در اسناد OCR شده
تصاویر میتوانند بدون تأثیر بر محتوای دیگر، نمونهبرداری مجدد، فشردهسازی مجدد یا جایگزین شوند.
۳. فونتها
به صورت برنامههای کامل فونت، زیرمجموعه (فقط گلیفهای استفاده شده گنجانده شدهاند) یا با نام ارجاع داده شده (باید روی سیستم نمایشگر نصب شده باشد) جاسازی میشوند. زیرمجموعهسازی پیشفرض است - اندازه فایل را به شدت کاهش میدهد. فرمتهای فونت پشتیبانی شده: Type1، TrueType، OpenType و CIDFont (برای CJK).
هنگامی که یک فونت ارجاع داده میشود اما جاسازی نشده و روی سیستم نمایشگر نصب نشده است، نمایشگر یک فونت مشابه را جایگزین میکند - که معمولاً ظاهر اشتباهی دارد. PDF/A برای جلوگیری از این امر نیاز به جاسازی تمام فونتها دارد.
۴. حاشیهنویسیها
برجستهسازیها، نظرات، پیوندها، مُهرها، واترمارکها و فیلدهای فرم همگی حاشیهنویسی هستند. آنها بر روی محتوای صفحه لایهبندی میشوند و میتوانند بدون تغییر صفحه زیرین اضافه، ویرایش یا حذف شوند.
فیلدهای فرم یک مورد خاص هستند: یک حاشیهنویسی ویجت تعاملی (بخش قابل مشاهده) به علاوه یک دیکشنری فیلد (بخش داده). هنگام پر کردن فرم و ذخیره، فقط دیکشنریهای فیلد تغییر میکنند - خود صفحه دست نخورده باقی میماند.
۵. گرافیک وکتور
خطوط، اشکال، منحنیها و مسیرهایی که با عملگرهای شبیه PostScript (moveto, lineto, curveto) رسم شدهاند. بدون افت کیفیت به صورت نامحدود مقیاسپذیر هستند. بیشتر خروجیهای CAD، نمودارها و دیاگرامها در PDF ها گرافیک وکتور هستند.
۶. امضاهای دیجیتال
امضاهای مبتنی بر PKI که به محدودههای بایت فایل گره خوردهاند. دیکشنری امضا مشخص میکند "بایتهای ۰ تا ۱۲۵۴۷ و ۱۴۲۰۰ تا پایان فایل امضا شدهاند" - یک محدوده کوچک در وسط برای خود مقدار امضا رزرو شده است. هر تغییری در محدودههای بایت امضا شده، امضا را نامعتبر میکند، که اینگونه PDF دستکاری پس از امضا را تشخیص میدهد.
برخی PDF ها چندین امضا دارند که به صورت بهروزرسانیهای افزایشی لایهبندی شدهاند - هر امضاکننده فایل را همانطور که در زمان دریافت آن وجود داشته امضا میکند و زنجیره را حفظ میکند.
فراداده: دو سیستم موازی
PDF دو سیستم فراداده دارد که اغلب با هم اختلاف دارند:
دیکشنری استاندارد /Info
در تریلر ذخیره میشود. فیلدها: Title، Author، Subject، Keywords، Creator (برنامهای که کاربر سند را در آن ایجاد کرده است)، Producer (برنامهای که PDF را تولید کرده است)، CreationDate، ModDate. رشتههای متنی ساده، خواندن آنها با هر ابزار PDF آسان است.
جریان فراداده XMP
یک جریان XML جداگانه (Adobe XMP، مبتنی بر RDF/XML) که از طرحوارههای غنیتری پشتیبانی میکند: Dublin Core، IPTC، طرحوارههای سفارشی خاص دامنه (پروفایلهای رنگی، ثبت حق چاپ، نسخهبندی دستنوشته).
تولیدکنندگان مدرن PDF به هر دو مینویسند. PDF های قدیمی فقط /Info دارند. برخی PDF ها /Info قدیمی از نسخه قبلی و XMP دقیق از ویرایش اخیر دارند - یا بالعکس. هنگام حسابرسی PDF ها برای انطباق یا پزشکی قانونی، هر دو را بررسی کنید.
استانداردهای ISO ساخته شده بر روی PDF
مشخصات پایه PDF، ISO 32000 است. چندین استاندارد مشتق شده، PDF را برای موارد استفاده خاص محدود میکنند:
| استاندارد | استفاده | محدودیتها |
|---|---|---|
| PDF/A | بایگانی طولانی مدت | تمام فونتها جاسازی شده، بدون جاوا اسکریپت، بدون صدا/تصویر، فضاهای رنگی مستقل از دستگاه. سطوح انطباق: PDF/A-1، A-2، A-3 (اجازه پیوست فایل را میدهد) |
| PDF/X | تولید چاپ | رنگ CMYK، فونتها و پروفایلهای رنگی جاسازی شده، بدون شفافیت (PDF/X-1a) یا شفافیت کنترل شده (PDF/X-4) |
| PDF/UA | دسترسیپذیری | درخت ساختار تگگذاری شده، فراداده زبان، متن جایگزین برای تصاویر، ترتیب خواندن منطقی |
| PDF/E | مهندسی | مدلهای سهبعدی (فرمتهای U3D، PRC)، فراداده خاص CAD |
| PDF/VT | چاپ تراکنشی متغیر | بهینهسازی شده برای نامههای شخصیسازی شده با حجم بالا |
یک PDF میتواند همزمان با چندین استاندارد مطابقت داشته باشد - PDF/A-2u (بایگانی با نگاشت یونیکد) به علاوه PDF/UA (دسترسیپذیری) برای بایگانیهای دولتی و حقوقی رایج است.
PDF های خطی (بهینهسازی شده برای وب)
یک PDF "خطی" یا "بهینهسازی شده برای وب"، بدنه را مجدداً مرتب میکند تا اشیاء صفحه اول در اوایل فایل ظاهر شوند. یک نمایشگر وب میتواند صفحه ۱ را پس از دانلود فقط حدود ۵۰ کیلوبایت اول، بدون انتظار برای کل فایل، رندر کند. تریلر در جلو تکرار میشود، به علاوه یک جدول راهنما که به نمایشگر میگوید هر صفحه از کجا شروع میشود.
بیشتر تولیدکنندگان مدرن PDF، خطیسازی را به عنوان گزینه "ذخیره برای وب" پشتیبانی میکنند. این فرمت ۲-۵٪ به اندازه فایل اضافه میکند در ازای رندر سریع صفحه اول در اتصالات کند.
رمزگذاری و مجوزها
PDF ها را میتوان با رمز عبور (یا گواهینامه) رمزگذاری کرد و مجوزهای دانهریز را اعطا کرد: چاپ، کپی متن، ویرایش، پر کردن فرمها، استخراج برای دسترسیپذیری. رمزگذاری در دیکشنری /Encrypt تریلر ذخیره میشود.
قدرت رمزگذاری تکامل یافته است: RC4 40 بیتی (PDF های اولیه، امروزه به راحتی شکسته میشوند)، RC4 128 بیتی (هنوز ضعیف)، AES-128، AES-256. پیادهسازی اولیه RC4 آکروبات در سال ۲۰۰۱ به صورت عمومی شکسته شد؛ رمزگذاری مدرن PDF (AES-256، PDF 2.0) هنگام استفاده با رمزهای عبور قوی، معتبر است.
توجه: "مجوزها" مشورتی هستند. نمایشی که به آنها احترام میگذارد، آنها را اجرا خواهد کرد. نمایشی که آنها را نادیده میگیرد (یا ابزاری که رمزگذاری را حذف میکند) این کار را نمیکند.
نحوه خواندن PDF ها توسط PDFSub
PDFSub با استفاده از اتصال PDFium در Rust (همان موتوری که نمایشگر PDF کرومیوم را پشتیبانی میکند) به علاوه PaddleOCR برای اسناد اسکن شده، PDF ها را پردازش میکند. برای جزئیات کامل معماری و مقایسه با ابزارهای مبتنی بر ابر، به امنیت PDF مرورگر در مقابل ابر مراجعه کنید.
برای تبدیل PDF ها به فرمتهای دیگر ضمن حفظ ساختار شرح داده شده در بالا:
- PDF به اکسل - متن + جداول را استخراج میکند، مختصات را حفظ میکند
- OCR PDF - یک لایه متن قابل جستجو به PDF های اسکن شده اضافه میکند
- PDF به ورد - متن را به پاراگرافهای قابل ویرایش بازمیگرداند
- فشردهسازی PDF - تصاویر را نمونهبرداری مجدد میکند، فونتها را زیرمجموعه میکند
برای گردش کارهای بایگانی به طور خاص، به نحوه تبدیل PDF به PDF/A مراجعه کنید.
مطالعه بیشتر
- ISO 32000-2 (مشخصات PDF 2.0) - مرجع معتبر، پولی
- آرشیو مرجع PDF ادوبی - مرجع رایگان برای PDF 1.7
- انجمن PDF - گروه کاری صنعت، مقالات رایگان و فایلهای آزمون انطباق
برای موضوعات خاص PDF: راهنمای انطباق PDF برای وکلا، راهنمای تبدیل PDF/A.