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

إنشاء مخرجات أرشيفية بصيغة PDF/A-4

استخدم هذه الوصفة لإنشاء مخرجات أرشيفية بصيغة ⁨PDF/A-4⁩ (المنظمة الدولية للتوحيد القياسي (⁨ISO⁩) 19005-4) باستخدام ⁨Pro⁩ PdfAManager. عند الحفظ، يدرج ⁨NextPDF⁩ عنصر ⁨OutputIntent⁩ وملف تعريف ⁨ICC⁩ المضمَّن (الاتحاد الدولي للألوان (⁨ICC⁩)) وبيانات التعريف. ينتج ⁨NextPDF⁩ مخرجات تستهدف المطابقة؛ ويقرر مدقق مستقل مدى المطابقة. تستند الوصفة إلى examples/32-pdfa4-icc.php.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro

⁨PDF/A-4⁩ ميزة من فئة ⁨Pro.⁩ في تثبيت ⁨Core⁩ فقط، يطرح enablePdfA() الاستثناء InvalidConfigException. تذكر الرسالة قدرة security.pdfa المفقودة وتشير إلى العلاج composer require nextpdf/pro. للتحقق، تحتاج إلى مدقق ⁨PDF/A⁩ على PATH. تستخدم الأمثلة ⁨veraPDF⁩ مع --flavour 4.

⁨PDF/A-4⁩ هو ملف تعريف الأرشفة ⁨ISO 19005-4⁩ المبني على ⁨ISO 32000-2⁩‏ (⁨PDF 2.0⁩). الملف المطابق حتمي اللون ومكتفٍ ذاتياً. فهو يعلن عن OutputIntent يشير إلى ملف تعريف ⁨ICC⁩ الوجهة المضمَّن، بحيث يمكن إعادة إنتاج اللون دون موارد خارجية (القسم 6.2.3). كل برنامج خط مضمَّن (القسم 6.2.10.4.1). يحمل المستند بيانات تعريف pdfaid بصيغة منصة بيانات التعريف القابلة للتوسعة (⁨XMP⁩) (القسم 6.7.3). الملف غير مشفَّر (القسم 6.6.4 — تحظر ⁨PDF/A⁩ مفتاح المقطورة Encrypt).

ينمذج ⁨NextPDF⁩‏ ⁨PDF/A⁩ عبر التعداد المصنَّف ConformanceMode. ينشئ enablePdfA() كائن ⁨Pro⁩ PdfAManager ويتخذ ConformanceMode::PdfA4 قيمةً افتراضية. أثناء save()، يدرج المدير عنصر ⁨OutputIntent⁩ ودفق ⁨ICC⁩ ومخططات امتداد ⁨XMP.⁩ يحافظ المميِّزان pdfaPart() وpdfaConformanceLetter() على اتساق بيانات التعريف pdfaid:part / pdfaid:conformance مع المتغير المحدَّد (الأساس 4، 4e، 4f). لا يصدر ملف التعريف الأساسي أي حرف pdfa:conformance، وفق ما يقتضيه الجزء.

تُولَّد واجهة برمجة التطبيقات (⁨API⁩) من ⁨PHPDoc.⁩ استخدم نقاط الدخول الرئيسية الآتية:

  • \NextPDF\Core\Document::createStandalone(): Document
  • Document::enablePdfA(?object $version = null): static
  • \NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool
  • \NextPDF\Conformance\ConformanceMode::PdfA4 / PdfA4e / PdfA4f
  • ConformanceMode::pdfaPart(): 2|3|4|null وConformanceMode::pdfaConformanceLetter(): string
examples/32-pdfa4-icc.php
<?php
declare(strict_types=1);
require_once __DIR__ . '/../vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/output/32-pdfa4-icc.pdf';
// Probe before activating a Pro-gated feature so a Core-only install
// gets an actionable message instead of a stack trace.
$registry = CapabilityRegistry::getInstance();
if (!$registry->get('security.pdfa')->isAvailable()) {
fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n");
exit(1);
}
$doc = Document::createStandalone();
$doc->enablePdfA(); // defaults to ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042');
$doc->setLanguage('en');
$doc->addPage();
$doc->setFont('helvetica', '', 12);
$doc->cell(0, 10, 'This document targets PDF/A-4.', newLine: true);
$doc->save($out); // PdfAManager emits OutputIntent + ICC + XMP here
echo "Created: output/32-pdfa4-icc.pdf\n";

استخدم هذا البرنامج المكتفي ذاتياً داخل إطار اختبار. في الإنتاج، اجعل حكم المدقق بوابةَ البناء. نجاح save() يثبت أن ⁨NextPDF⁩ أصدر القطع الأثرية؛ والمدقق وحده يثبت المطابقة.

<?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');
if (!CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable()) {
fwrite(STDERR, "PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro\n");
exit(1);
}
try {
$doc = Document::createStandalone();
$doc->enablePdfA(); // ConformanceMode::PdfA4
$doc->setTitle('Archival Record 2026-0042');
$doc->setLanguage('en');
$doc->addPage();
$doc->setFont('helvetica', '', 12);
$doc->cell(0, 10, 'Long-term archival record. PDF/A-4 (ISO 19005-4).', newLine: true);
// Do NOT call setEncryption(): PDF/A prohibits the Encrypt key and
// the call raises an incompatibility exception in either order.
$doc->save($out);
} catch (InvalidConfigException $e) {
fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n");
exit(1);
}
$exitCode = 0;
$report = [];
exec('verapdf --flavour 4 ' . escapeshellarg($out), $report, $exitCode);
if ($exitCode !== 0) {
fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n");
fwrite(STDERR, implode("\n", $report) . "\n");
exit(1);
}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming\n";

على مضيف مثبت عليه nextpdf/pro ومع verapdf يبلّغ بأن الملف مطابق، يكون المخرج القياسي المتوقع (⁨STDOUT⁩) هو:

veraPDF PASS — archival.pdf is reported PDF/A-4 conforming

على مضيف ⁨Core⁩ فقط، يخرج البرنامج بقيمة غير صفرية بعد كتابة PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro إلى الخطأ القياسي (⁨STDERR⁩). إذا أبلغ verapdf عن مشكلة، يخرج البرنامج بقيمة غير صفرية بعد veraPDF FAILED — output is not PDF/A-4 conforming. تنسب الصياغة الحكم إلى ⁨veraPDF⁩؛ ولا يؤكد ⁨NextPDF⁩ مطابقة ⁨PDF/A-4.⁩

  • بوابة ⁨Pro.⁩ في تثبيت ⁨Core⁩ فقط، يطرح enablePdfA() الاستثناء InvalidConfigException. تذكر الرسالة security.pdfa والعلاج composer require nextpdf/pro. افحص السجل أولاً لعرض رسالة واضحة للمشغّل.
  • تعارض التشفير. إذا استدعيت setEncryption() أو useAesGcm() أو setPublicKeyEncryption() على مستند ⁨PDF/A⁩، يطرح ⁨NextPDF⁩ استثناء عدم توافق بأي من ترتيبَي الاستدعاء. تحظر ⁨PDF/A-4⁩ مفتاح المقطورة Encrypt‏ (⁨ISO 19005-4⁩ القسم 6.6.4).
  • متغير المطابقة. مرِّر ⁨Pro⁩ PdfAVersion إلى enablePdfA() من أجل 4e (الهندسة، ثلاثي الأبعاد) أو 4f (مرفقات الملفات). لا يصدر ملف التعريف الأساسي أي حرف pdfa:conformance؛ ويحدِّد 4e/4f القيمتين E/F. يحافظ المميِّز ConformanceMode على اتساق القيمة pdfaid:part.
  • الوسم مستقل. يعامل أساس ⁨PDF/A-4⁩ الوسم على أنه اختياري. للحصول على مخرج يكون قابلاً للوصول وأرشيفياً في الوقت نفسه، فعّل الوضع الموسوم و⁨PDF/A⁩ كلٌ على حدة؛ راجع وصفة ⁨PDF/UA-2.⁩
  • البوابة هي المدقق. نجاح save() يعني أن القطع الأثرية صدرت، لا أن الملف مطابق. لا تصرّح بمطابقة ⁨PDF/A-4⁩ حتى يجتاز المدقق.

يضيف عنصر ⁨OutputIntent⁩ دفق ملف تعريف ⁨ICC⁩ واحداً (بضع مئات من الكيلوبايت لـ ⁨sRGB⁩) إضافةً إلى حزمة ⁨XMP.⁩ يهيمن تضمين الخطوط على الحجم عندما يستخدم المستند خطوطاً غير الأربعة عشر الأساسية. بالنسبة إلى المستندات الأرشيفية النموذجية، تبقى الوصفة ضمن ميزانية 2000 ⁨ms⁩ / 128 ⁨MB.⁩ ينطبق ملف إعادة الإنتاج الدلالي: قارن مخرجاً موجهاً للمدقق عبر شجرة بنية النحو المجردة (⁨AST⁩) البنيوية، إضافةً إلى بيانات التعريف، بدلاً من البايتات الخام.

إقامة البيانات وإجراءات التخفيف الخاصة بالبيانات الشخصية

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

المخرج الأرشيفي طويل العمر ومكتفٍ ذاتياً بحكم التصميم. تبقى أي بيانات شخصية في المحتوى طوال عمر الأرشيف. ينتقل ملف تعريف ⁨ICC⁩ المضمَّن وبيانات التعريف مع الملف. طبّق سياسة الاحتفاظ والتقليل قبل الأرشفة. لا تملك ⁨PDF/A-4⁩ دلالات تنقيح.

القياس الآمن وتنظيف السجلات

قسم بعنوان «القياس الآمن وتنظيف السجلات»

تكتب الوصفة سطر تقدم ثابتاً فقط. قد يتضمن مخرج ⁨veraPDF⁩ شظايا محتوى؛ أبقِ سجلات المدقق خارج مصارف السجلات المشتركة للمستندات ذات المحتوى الحساس.

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

لا تجري هذه الوصفة أي عملية تشفيرية. لا يغير وضع معايير معالجة المعلومات الفدرالية (⁨FIPS⁩) سلوكها. تحظر ⁨PDF/A-4⁩ التشفير، لذا لا يُختار أي مُعمٍّ.

البيانالمواصفةالبند⁨reference_id⁩
تتطلب ⁨PDF/A-4⁩ عنصر ⁨OutputIntent⁩ يشير إلى ملف تعريف ⁨ICC⁩ مضمَّن.⁨ISO 19005-4⁩§6.2.3
اللون مستقل عن الجهاز عبر ملف الوجهة الشخصي للمُخرَج.⁨ISO 19005-4⁩§6.2.4.3
كل برنامج خط مُضمَّن.⁨ISO 19005-4⁩§6.2.10.4.1
يحمل المستند تعريف ⁨pdfaid⁩ في ⁨XMP.⁩⁨ISO 19005-4⁩§6.7.3
التشفير محظور في ⁨PDF/A-4.⁩⁨ISO 19005-4⁩§6.6.4
يقرر مُدقِّق، لا المُنتِج، مدى المطابقة.⁨ISO 19005-4⁩§6.7.3

ينتج ⁨NextPDF⁩ مخرجات تستهدف المطابقة مع ⁨PDF/A-4.⁩ الدعم ليس مطابقة؛ وملف التعريف المختبَر ليس شهادة. لا تؤكد هذه الوصفة المطابقة؛ بل يتخذ مدقق مستقل، مثل ⁨veraPDF⁩، ذلك القرار. اجعل حكمه بوابةَ البناء.