تخطَّ إلى المحتوى

PDF 2.0: ما الذي تغيّر؟

Evidence: Standard-backed

⁨PDF 2.0⁩ هو ⁨ISO 32000-2.⁩ وهو أول مواصفة ⁨PDF⁩ تملكها ⁨ISO⁩ بالكامل بدلًا من ⁨Adobe.⁩ وفي معظمه هو توحيد وتنقية للإصدار 1.7، لا إعادة اختراع جذرية. تتناول هذه الصفحة ما تغيّر فعلًا، وأيُّ هذه التغييرات ستلمسه عمليًا، وكيف يستهدف ⁨NextPDF⁩ خطَّ الأساس للإصدار 2.0 افتراضيًا، مع بقائه قادرًا على كتابة بنية ملفات أقدم عندما يتطلب ذلك ملفُّ تعريفٍ ما.

قد يوحي اسم “⁨PDF 2.0⁩” بأنه تنسيق مختلف. لكنه ليس كذلك. يستخدم ملف الإصدار 2.0 نموذج الكائنات نفسه، والمرجع المتقاطع (⁨xref⁩)، والذيل (⁨trailer⁩) كما في الإصدار 1.7، ما يجعل التقليل من شأن التغييرات الحقيقية أمرًا سهلًا. التغييرات التي تسبّب المشكلات ليست الميزات البارزة، بل التشديدات: قواعد كانت اختيارية في الإصدار 1.7 وصارت الآن متوقَّعة، وميزات أُزيلت بهدوء. قد يصبح المستند الذي كان ملفًا صحيحًا تمامًا في 1.7 ملفَّ 2.0 غير مطابق، دون أي فرق مرئي واحد.

السبب الآخر لأهمية هذا هو التوجّه. ⁨NextPDF⁩ محرّك ⁨PDF 2.0.⁩ بمجرد أن تعرف ما يتوقّعه الإصدار 2.0، وأين يختلف عمدًا عن الإصدار 1.7، يمكنك أن تفهم لماذا يرفض المحرّك بعض الأشياء، ويُضمّن الخطوط بصرامة أكبر، ويستخدم دفق مرجع متقاطع بدلًا من جدول افتراضيًا.

  • ⁨PDF 2.0⁩ = ⁨ISO 32000-2⁩، مملوك لـ ⁨ISO⁩، ويُبنى على الإصدار 1.7 (لا يستبدله).
  • تصبح الترويسة %PDF-2.0؛ ويذكر الكاتب المطابق الإصدار بوصفه 2.0 في الترويسة أو في فهرس /Version.
  • معظم بنية الملف بلا تغيير — الكائنات غير المباشرة نفسها، والذيل نفسه، والانضباط نفسه في startxref/%%EOF.
  • دفق المرجع المتقاطع هو الافتراضي الطبيعي للإصدار 2.0؛ ويبقى الجدول الكلاسيكي ذو الـ 20 بايت قانونيًا، ولا تزال بعض ملفات تعريف ⁨PDF/A⁩ تتطلبه.
  • يُضيف الإصدار 2.0 أشياء (مثل بنية أغنى للملفات المرتبطة وأجزاء المستند، وتشفير أقوى عبر امتداد ⁨AES-256-GCM⁩) ويُزيل أشياء (بعض وسوم البنية؛ وتوقعات أكثر تشدّدًا لتضمين الخطوط؛ ومجموعات أحرف ⁨CJK⁩ مهملة).
  • يستهدف ⁨NextPDF⁩ الإصدار 2.0 افتراضيًا، ويمكنه إجراء التسلسل لبنية 1.7/1.4 عندما يتطلب ذلك ملفُّ تعريف مطابقةٍ ما.

الإصدار قرار، ويُعبَّر عنه في مكان واحد: استراتيجية التسلسل.

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) تكتب ترويسة %PDF-2.0، وتذكر /2.0 بوصفه إصدار الفهرس، وتُخرج دفق مرجع متقاطع مضغوطًا. كما تحمل تشديد الخطوط الخاص بالإصدار 2.0 مباشرةً. في إطار ملف تعريف الإصدار 2.0 يمكنها أن تفرض رفض خط ⁨Type 1⁩ قياسي غير مُضمَّن، بدلًا من مجرد التحذير منه، لأن المواصفة تتوقّع الآن تضمين تلك الخطوط. توجد استراتيجيتا الجدول (Pdf17TableStrategy، Pdf14TableStrategy) لسبب محدد، وهو أن بعض ملفات التعريف تحتاج إلى الشكل الأقدم. يفرض ⁨PDF/A-2/-3⁩ جدول المرجع المتقاطع التقليدي، ويحظر ⁨PDF/A-1⁩ إضافةً إلى ذلك دفوق الكائنات والمرجع المتقاطع. تنفّذ الاستراتيجيات الثلاث جميعها واجهة PdfSerializationStrategy الواحدة، لذا يبقى الكاتب متطابقًا فوق نقطة الفصل. لا يتغيّر إلا شكل ⁨trailer/xref⁩.

يُوصَّل التشفير الأقوى بالطريقة المتعمَّدة نفسها. PdfXrefWriter (src/Writer/PdfXrefWriter.php) يُمرّر خيار تفعيل ⁨AES-256-GCM⁩ (امتداد ⁨ISO/TS 32003⁩ للإصدار 2.0) إلى قاموس التشفير بحيث تطابق قيمتا إصدار المعالج ووضع الشيفرة الصادرتان البايتات المُنتَجة فعلًا. لا يعلن المحرّك شيفرةً ويكتب أخرى.

التصميم العام هو الآتي. الإصدار 2.0 هو الافتراضي. البنية الأقدم متاحة عن قصد، لا بالمصادفة أبدًا. وحيثما يشدّد الإصدار 2.0 قاعدةً، يمكن لـ ⁨NextPDF⁩ أن يلتزم بالخط المشدَّد بدلًا من تخفيفه بهدوء.

  1. Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
  2. Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
  3. Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
نسب إصدارات PDF الذي يستوعبه NextPDF: صار PDF 1.7 الأساس لدى ISO، وISO 32000-2 هو PDF 2.0، ويوسّع ISO/TS 32003 الإصدار 2.0 بتشفير AES-256-GCM.

بيان الإصدار إلزامي. Spec: ISO 32000-2, §7.5.2 ينص على أن المعالج الذي يكتب ملفًا مطابقًا يجب أن يحدّد الإصدار — إما في الترويسة أو بوصفه مدخل الفهرس /Version — على أنه 2.0، وأن الترويسة هي %PDF-1.n أو %PDF-2.n متبوعةً بعلامة نهاية سطر واحدة. Spec: ISO 32000-2, §7.7.2 يضيف أن الفهرس /Version يتجاوز إصدار ترويسة سابقًا، وهو بالضبط ما يجعل رفع الإصدار التدريجي ممكنًا. Evidence: Standard-backed

كون الإصدار 2.0 توحيدًا لا إعادة كتابة يتضح فيما يبقيه: دفق المرجع المتقاطع (/Type /XRef) هو الآلية نفسها التي أُدخلت في PDF 1.5 وحُملت إلى الأمام بوصفها افتراضي الإصدار 2.0 ( Spec: ISO 32000-2, §7.5.8 ). بنية الكائن غير المباشر والذيل وstartxref باقية بلا تغيير عمّا ورد في وصف الصفحة السابقة.

التغييرات التي تهمّ هي الإزالات والتشديدات. تسجّل المواصفة أن ستة عناصر بنية قياسية موجودة في فضاء أسماء البنية القياسية لـ PDF 1.7 ليست جزءًا من فضاء أسماء PDF 2.0 — Art، BlockQuote، TOC، Reference، BibEntry، وCode ( Spec: ISO 32000-2, Annex L.3 ، مع تعريف فروق فضاء الأسماء وفق Spec: ISO 32000-2, §14.8.6 ). كما تشدّد على خطوط Type 1 القياسية الأربعة عشر: فبينما كان الإصدار 1.0–1.7 يسمح لقواميسها بإغفال مدخلات القياسات، يغلق الإصدار 2.0 هذا الباب ( Spec: ISO 32000-2, §9.6.2.1 ). كما ينقّح مجموعات أحرف CJK المعرَّفة مسبقًا. على سبيل المثال، Adobe-Korea1 مهمل في الإصدار 2.0. وأُضيف Adobe-KR. لا يغيّر أيٌّ من ذلك كيف تبدو صفحة موجودة. لكنه كله قد يغيّر ما إذا كانت مطابِقة.

الفئةأمثلة (2.0 مقابل 1.7)هل يغيّر المظهر؟لماذا يهمّ
بلا تغييرالكائنات غير المباشرة، الذيل، startxref/%%EOF، دفوق ⁨xref⁩الإصدار 2.0 يستخدم نموذج الكائنات نفسه؛ ومعظم الأدوات تنتقل كما هي
مُضافبنية أغنى للملفات المرتبطة / أجزاء المستند؛ تشفير ⁨AES-256-GCM⁩ (⁨ISO/TS 32003⁩)لاقدرة جديدة تختار تفعيلها؛ تتجاهلها القارئات الأقدم بأمان
مُشدَّديُتوقَّع تضمين خطوط ⁨Standard-14⁩؛ ولم يعد بالإمكان إغفال القياساتلاقد يكون ملف 1.7 صحيحًا ملفَّ 2.0 غير مطابق
مُزالستة عناصر بنية من فضاء أسماء 1.7 (Art، BlockQuote، TOC، Reference، BibEntry، Code)؛ مجموعات ⁨CJK⁩ مهملة (على سبيل المثال، ⁨Adobe-Korea1⁩)لاصامت: لا شيء مرئي يشير إلى المطابقة المفقودة

تغييرات ⁨PDF 2.0⁩ التي تهمّ غير مرئية في معظمها الساحق: إضافات تختار تفعيلها، و⁨tightenings/removals⁩ تغيّر المطابقة دون تغيير بكسل واحد معروض.

الفرق المرئي الوحيد بين ملف 2.0 وملف 1.7 هو غالبًا سطران — الترويسة وإصدار الفهرس — مع أن قواعد المطابقة وراءهما تختلف اختلافًا جوهريًا.

%PDF-2.0 % was %PDF-1.7
...
1 0 obj
<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later
/Pages 2 0 R >>
endobj
...
% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)
99 0 obj
<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>
stream
<binary xref entries>
endstream
endobj
startxref
12345
%%EOF

يرى القارئ %PDF-2.0 و/Version /2.0. ما لا يراه — وما يراه مدقّق المطابقة — هو أن هذا الملف بات يُتوقَّع منه أن يُضمّن خطوطه القياسية، ويجب ألا يستخدم وسوم البنية التي أزالها الإصدار 2.0. البايتات المختلفة قليلة. أما القواعد المختلفة فليست كذلك.

الفخ هو: “نحن نُخرج ⁨PDF 2.0⁩، لذا فنحن أكثر مطابقةً من ذي قبل.” كتابة %PDF-2.0 ادّعاء، لا ضمان. قد يحمل الملف ترويسة الإصدار 2.0 ومع ذلك ينتهك الإصدار 2.0 — بالإحالة إلى خط قياسي غير مُضمَّن، أو باستخدام ميزة أزالها الإصدار 2.0 — بالطريقة نفسها تمامًا التي كانت مقبولةً في إطار الإصدار 1.7. يرفع مؤشّر الإصدار المعيار الذي يُقاس الملف عليه. لكنه لا يرفع الملف فوقه. والخطأ المعاكس هو افتراض أن ملف 1.7 يعمل بوصفه 2.0 بمجرد تغيير الترويسة: فهو عادةً يُعرَض بشكل متطابق ويفشل في المطابقة، لأن التشديدات حقيقية وإن كانت غير مرئية.

استهداف خطّ الأساس للإصدار 2.0 يعني أن ⁨NextPDF⁩ يستخدم بنية ملفات الإصدار 2.0 افتراضيًا، ويمكنه الالتزام بالقواعد المشدَّدة للإصدار 2.0. وهذا لا يعني أن كل ميزة اختيارية في الإصدار 2.0 منفَّذة، ولا أن إصدار ترويسة 2.0 يصادق على مستند وفق ⁨PDF/A⁩ أو ⁨PDF/UA⁩ أو أي ملف تعريف آخر. تلك أهداف مطابقة منفصلة وأكثر صرامة، ومُركَّبة فوق المواصفة الأساسية، ولكلٍّ منها التحقق الخاص به.

هذه الصفحة توجيه عملي لفروق الإصدارات، لا سجلُّ تغييرات شاملًا لـ ⁨ISO 32000-2⁩ مقابل 32000-1. وحيثما تحكم ميزة محددة أو إهمال محدد في الإصدار 2.0 سلوكَ المحرّك، يكون ذلك السلوك مستندًا إلى بنده الخاص. ترسم هذه الصفحة المشهد العام بدلًا من تعداد كل فرق على مستوى البنود.

هل ⁨PDF 2.0⁩ متوافق رجعيًا مع قارئات 1.7؟ إلى حد كبير، فيما يخص البنية التي لم تتغيّر. ميزات الإصدار 2.0 الجديدة مصمَّمة عمومًا بحيث يستطيع القارئ الأقدم تجاهل ما لا يفهمه. لكن ميزةً خاصةً بالإصدار 2.0 فقط لن يحترمها قارئ 1.7.

أيُّهما يفوز، الترويسة أم /Version في الفهرس؟ يأخذ /Version في الفهرس الأسبقية عندما يسمّي إصدارًا أحدث من الترويسة. هذا ما يتيح لتحديث تدريجي رفع إصدار ملف دون إعادة كتابة الترويسة.

لماذا يستخدم ⁨NextPDF⁩ دفق مرجع متقاطع افتراضيًا، لا جدولًا؟ دفق المرجع المتقاطع هو الآلية الطبيعية لـ ⁨PDF 2.0⁩ — مدمج وقادر على فهرسة الكائنات المضغوطة. ولا يزال الجدول ذو الـ 20 بايت يُكتب عندما يتطلبه ملف تعريف (لا سيما بعض مستويات ⁨PDF/A⁩).

  • ⁨PDF 2.0⁩ — مواصفة ⁨PDF⁩ المقننة بوصفها ⁨ISO 32000-2⁩، أول إصدار تملكه ⁨ISO⁩ بدلًا من ⁨Adobe.⁩
  • ⁨ISO 32000-1⁩ — تقنين ⁨ISO⁩ لـ ⁨PDF 1.7⁩ من ⁨Adobe⁩؛ الأساس الذي يبني عليه ⁨PDF 2.0.⁩
  • ⁨ISO/TS 32003⁩ — مواصفة تقنية توسّع ⁨PDF 2.0⁩ بتشفير ⁨AES-256-GCM⁩ (⁨AESV4⁩).
  • /Version في الفهرس — مدخل فهرس المستند الذي يذكر إصدار ⁨PDF⁩؛ يتجاوز الترويسة عندما يسمّي إصدارًا أحدث.
  • دفق المرجع المتقاطع — آلية المرجع المتقاطع في ⁨PDF 1.5⁩+ / 2.0 (/Type /XRef)؛ الافتراضي لـ ⁨NextPDF⁩، مع بقاء الجدول الكلاسيكي متاحًا لملفات التعريف الأقدم.
  • التشديد — قاعدة كانت اختيارية أو مسموحًا بها في 1.7 وصارت متوقَّعة أو مطلوبة في 2.0، تغيّر المطابقة دون تغيير المظهر.