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

مطابقة PDF/A-4: مخرجات NextPDF لـ ISO 19005-4

بيان الحدود. يُنتج ⁨NextPDF⁩ مُخرَجات مصمّمة لمطابقة ⁨PDF/A-4.⁩ لا تُثبت المكتبة المطابقة؛ بل تُثبتها أداة تحقّق خارجية، مثل ⁨veraPDF.⁩

معيار ⁨PDF/A-4⁩ هو ⁨ISO 19005-4⁩:2020، وهو ملف التعريف الأرشيفي المبني على ⁨PDF 2.0.⁩ يوفّر ⁨NextPDF Core⁩ مُميِّز ConformanceMode ‏(PdfA4، PdfA4e، PdfA4f). وعند save()، يُصدر محرك ⁨Premium⁩‏ nextpdf/pro ‏⁨OutputIntent⁩، وملف ⁨ICC⁩ المُضمَّن، ومخطط التعريف pdfaid الخاص بمنصّة البيانات الوصفية القابلة للتوسعة (⁨XMP⁩). دور المكتبة هو إنتاج المُخرَجات، أما أداة ⁨veraPDF⁩ فهي التي تقرّر المطابقة. يوضّح ⁨ISO 19005-4⁩ §6.7.3 صراحةً أن خاصّيتَي pdfaid:part/pdfaid:rev “لا تحدّدان المطابقة بمفردهما”.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

يُسجّل ⁨Core⁩ القدرة security.pdfa، لكنّه يُبلِّغ عنها باعتبارها غير متاحة من دون nextpdf/pro. في هذه الحالة، تطرح enablePdfA() الاستثناء InvalidConfigException مع مسار للترقية بدلاً من إصدار ملف غير مطابق.

تربط Document::enablePdfA(?object $version = null) مُدخَل تعداد PdfAVersion بحالة ConformanceMode. وتعود افتراضيًا إلى ConformanceMode::PdfA4 عند إدخال غير معروف ('4e' → PdfA4e، '4f' → PdfA4f). يفرض الوضع على الملف المطابق ثلاثة التزامات عند الإصدار:

  • ⁨OutputIntent⁩ + ⁨ICC⁩ — يسمح §6.2.3 للملف المطابق بأن يُحدِّد خصائص ألوانه عبر ⁨OutputIntent⁩ خاص بـ⁨PDF/A-4⁩ يُشير إلى دفق DestOutputProfile من اتحاد الألوان الدولي (⁨ICC⁩). وبموجب §6.2.4.1، يُعدّ ذلك أحد مسارَين مسموح بهما للوصول إلى اللون المستقل عن الجهاز (والآخر هو تحديد فضاءات اللون المستقلة عن الجهاز مباشرةً). ‏⁨OutputIntent⁩ هو المسار الذي يعتمده ⁨NextPDF⁩، وليس متطلَّبًا غير مشروط في المعيار.
  • التعريف عبر pdfaid — يتطلّب §6.7.3 وجود مخطط تعريف ⁨PDF/A⁩ في ⁨XMP⁩ على مستوى المستند (فضاء أسماء ⁨AIIM⁩‏ pdfaid) مع pdfaid:part/pdfaid:rev. كما تُعيَّن في ⁨PDF/A-4e⁩ و⁨PDF/A-4f⁩ القيمة pdfa:conformance ‏(⁨E⁩ / ⁨F⁩). ينصّ §6.7.3 على أنّ الملف الذي لا يطابق أيًّا منهما يجب ألّا يوفّر قيمة pdfa:conformance.
  • تضمين الخطوط — يتطلّب §6.2.10 تضمين جميع الخطوط المستخدمة للعرض.

يُصدر ⁨NextPDF⁩ هذه المُخرَجات، لكنه لا يُجري تحديد المطابقة الوارد في §5. فهذه مهمّة ⁨veraPDF⁩، ويحفظ §6.7.3 هذا التحديد لتلك العملية.

الدالّةالأثر
enablePdfA(?object $version = null): staticيوجّه إلى ConformanceMode::PdfA4/PdfA4e/PdfA4f؛ ويجدول ⁨OutputIntent⁩ + ⁨ICC⁩ + ⁨XMP⁩ عند save(). يطرح InvalidConfigException|PageLayoutException|CompressionException عند غياب nextpdf/pro.
ConformanceMode::pdfaPart(): ?intيُعيد جزء ⁨ISO 19005⁩ الخاص بالوضع النشط (4 لـ⁨PdfA4⁩*).
ConformanceMode::pdfaConformanceLetter(): stringيُعيد حرف pdfa:conformance ‏(⁨E⁩ / ⁨F⁩) أو قيمة فارغة.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Exception\InvalidConfigException;
use NextPDF\Support\CapabilityRegistry;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/archival.pdf';
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
fwrite(STDERR, "PDF/A-4 requires nextpdf/pro.\n");
exit(1);
}
try {
$doc = Document::createStandalone();
$doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042');
$doc->setLanguage('en');
$doc->writeHtml('<h1>Archival record</h1><p>Body.</p>');
$doc->save($out); // OutputIntent + ICC + XMP scheduled here
} catch (InvalidConfigException $e) {
fwrite(STDERR, $e->getMessage() . "\n");
exit(1);
}
echo "Wrote {$out} — validate: verapdf --flavour 4 {$out}\n";

نموذج برمجي — بيئة الإنتاج

قسم بعنوان «نموذج برمجي — بيئة الإنتاج»

اجعل حُكم أداة التحقّق بوابة البناء. شغّل verapdf --flavour 4 على المُخرَج، وأفشِل البناء عند أي خروج بقيمة غير صفرية. حُكم أداة التحقّق هو البوابة؛ أمّا ما تُصدره المكتبة فهو مُدخَل إليها، وليس الحُكم نفسه أبدًا. راجع /cookbook/php/pdfa4-conformance-gate/ للاطّلاع على مسار البناء المُبوَّب الكامل.

  • فعِّل قبل المحتوى. استدعِ enablePdfA() قبل إضافة المحتوى. فالتفعيل بأثر رجعي لا يُعيد معالجة الكائنات المكتوبة سابقًا.
  • لا تشفير. يحظر ⁨PDF/A⁩ المفتاح Encrypt. لا تستدعِ setEncryption() في مستند ⁨PDF/A.⁩ التشفير يخصّ السرّية، لا سلامة الأرشفة، والاثنان متنافيان هنا.
  • pdfa:conformance مشروطة. يُعيّنها ⁨PDF/A-4e⁩ و⁨PDF/A-4f⁩ فقط. إصدارها في ملف ⁨PDF/A-4⁩ عادي هو بحدّ ذاته انتهاك للمطابقة (§6.7.3) — وحالة ConformanceMode تمنع ذلك بحكم تصميمها.
  • مرفقات ⁨PDF/A-4f.⁩ يجب أن تحمل الملفات المُضمَّنة في ملف ⁨PDF/A-4f⁩ المفتاحَين F وUF (ويُوصى بـ⁨Desc⁩) بموجب §6.7.5. وهذا يدعم مسار ⁨ZUGFeRD/Factur-X⁩ الهجين.

يُضيف تضمين ⁨OutputIntent⁩ + ⁨ICC⁩ دفق ⁨ICC⁩ ثابت الحجم (ملف فضاء العمل) وحزمة ⁨XMP⁩ عند save(). حدود الميزانية هي زمن جداري ≤ 1500 ⁨ms⁩ وذروة ≤ 128 ⁨MB⁩ لمستند نموذجي.

يمنع ⁨PDF/A-4⁩ التشفير. ملف التعريف قيد للأرشفة وطول العمر، وليس ضابطًا أمنيًا. حفظ المفاتيح وسياسة جهة التحقّق خارج نطاق ملف التعريف هذا؛ راجع مركز الثقة.

إقامة البيانات وتدابير التخفيف الخاصة بمعلومات تحديد الهوية الشخصية

قسم بعنوان «إقامة البيانات وتدابير التخفيف الخاصة بمعلومات تحديد الهوية الشخصية»

يجري إصدار ⁨PDF/A-4⁩ داخل العملية، ولا يكتب سوى المستند وملف ⁨ICC⁩ المُضمَّن وحزمة ⁨XMP.⁩ لا يغادر أي محتوى العملية. معلومات تحديد الهوية الشخصية (⁨PII⁩) في المحتوى المصدر هي مسؤولية الجهة المُدمِجة. ملف التعريف لا يحجب البيانات.

القياس عن بُعد الآمن وتنقية السجلّات

قسم بعنوان «القياس عن بُعد الآمن وتنقية السجلّات»

لا يكتب المثال إلى ⁨STDERR⁩ سوى مسار المُخرَج وأمر أداة التحقّق. وهو لا يُسجّل أي بايتات من المستند. تلتزم الوصفة بـNEXTPDF_COOKBOOK_OUTPUT ولا تطبع ⁨PDF⁩ إلى ⁨STDOUT⁩ أبدًا.

ملف ⁨PDF/A-4⁩ لا يوفّر تحكّمًا في الوصول. يمكن لأي شخص يملك الملف قراءته. يدعم ملف التعريف استدامة العرض، لا السرّية. تعامل مع دفق ⁨ICC⁩ الخاص بـ⁨OutputIntent⁩ بوصفه عامًّا.

لا يتضمّن إصدار ⁨PDF/A-4⁩ أي تشفير. التوقيع الرقمي على ملف ⁨PDF/A-4⁩ (يسمح ⁨PDF/A-4⁩ §6.5 بملفات تعريف ⁨PAdES⁩) شأن منفصل خاص بوصفة التوقيع، ويرث حالة ⁨FIPS⁩ الخاصة بتلك الوصفة. لا تقدّم هذه الصفحة أي ادعاء بخصوص التوقيع.

الادعاءالمواصفةالبند⁨reference_id⁩
يجوز لملف ⁨PDF/A-4⁩ أن يُحدِّد خصائص ألوانه عبر ⁨OutputIntent⁩ خاص بـ⁨PDF/A⁩ يُشير إلى ملف ⁨ICC⁩ من نوع ⁨DestOutputProfile.⁩⁨ISO 19005-4⁩§6.2.3
يجوز تحديد اللون المستقل عن الجهاز مباشرةً أو بطريقة غير مباشرة عبر ⁨DestOutputProfile⁩ الخاص بـ⁨OutputIntent⁩ (أي عبر أحد مسارَين مسموح بهما).⁨ISO 19005-4⁩§6.2.4.1
يُحدَّد إصدار ⁨PDF/A⁩ عبر مخطط تعريف ⁨PDF/A⁩‏ (⁨pdfaid⁩) في ⁨XMP⁩ الخاص بالمستند.⁨ISO 19005-4⁩§6.7.3
لا تحدّد ⁨pdfaid⁩:⁨part⁩ / ⁨pdfaid⁩:⁨rev⁩ المطابقة بمفردهما؛ ويُجرى التحديد بموجب البند 5.⁨ISO 19005-4⁩§6.7.3
الملف الذي لا يطابق ⁨PDF/A-4e⁩ ولا ⁨PDF/A-4f⁩ يجب ألّا يوفّر قيمة ⁨pdfa⁩:⁨conformance.⁩⁨ISO 19005-4⁩§6.7.3
تتطلّب الملفات المُضمَّنة في ⁨PDF/A-4f⁩ المفتاحَين ⁨F⁩ و⁨UF⁩ (مع التوصية بـ⁨Desc⁩).⁨ISO 19005-4⁩§6.7.5
يجب تضمين جميع الخطوط المستخدمة في العرض.⁨ISO 19005-4⁩§6.2.10
يعتمد استخدام الشفافية / اللون على ⁨OutputIntent⁩ مُعلَن.⁨ISO 19005-4⁩§6.2.9

تتكوّن الاستشهادات من مُعرِّف البند إضافةً إلى مؤشّرات reference_id إلى مجموعة نصوص التحقّق. لا يُعاد إنتاج أي نص من المعايير؛ بل يُلخّص ⁨NextPDF⁩ البنود بكلماته الخاصة.