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

أنشئ مخرجات PDF/A-4 واجعلها مشروطة بحُكم veraPDF المرجعي

يوضح هذا الدليل كيفية إنشاء مخرجات ⁨PDF/A-4⁩ باستخدام ⁨PdfAManager⁩ الخاص بإصدار ⁨Premium⁩، ثم تشغيل ⁨veraPDF⁩ واستخدام حُكمه بوابةً للبناء. يكتب ⁨NextPDF⁩ العناصر المُنتَجة، أما المُدقِّق فهو من يقرّر المطابقة. يتّبع التدفّق examples/32-pdfa4-icc.php.

  • ‏⁨Core⁩ مُثبَّت: composer require nextpdf/core:^3.
  • إصدار ⁨Premium⁩ مُثبَّت: composer require nextpdf/pro. ‏⁨PDF/A-4⁩ ميزة ضمن فئة ⁨Premium⁩ (سجلّ قرار معماري ⁨ADR-011⁩). من دون إصدار ⁨Premium⁩، يطرح enablePdfA() الاستثناء InvalidConfigException مع مسار للترقية.
  • ‏⁨veraPDF⁩ على PATH من أجل خطوة البوابة.
  1. افحص سجلّ القدرات بحثًا عن security.pdfa كي يعرض التثبيت المقتصر على ⁨Core⁩ رسالةً واضحةً بدلًا من تتبُّع المكدّس.
  2. أنشئ المستند، ثم استدعِ enablePdfA() قبل إضافة المحتوى.
  3. عيّن البيانات الوصفية واكتب المحتوى. لا تستدعِ setEncryption()؛ إذ يحظر ⁨PDF/A⁩ المفتاح Encrypt.
  4. احفظ المستند. أثناء save()، يجدول PdfAManager ⁨OutputIntent⁩، وملف تعريف الاتحاد الدولي للألوان (⁨ICC⁩) المضمَّن، ومخططات امتدادات منصّة البيانات الوصفية القابلة للتوسيع (⁨XMP⁩).
  5. شغّل verapdf --flavour 4 على المخرجات. أفشِل البناء إذا خرج برمز غير صفري. حُكم المُدقِّق هو البوابة.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Exception\InvalidConfigException;
use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/archival.pdf';
// Step 1 — probe before activating a Premium-gated feature.
$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);
}
try {
$doc = Document::createStandalone();
// Step 2 — enable PDF/A-4 before content. Defaults to PdfA4.
$doc->enablePdfA();
// Step 3 — metadata and content. No setEncryption() on a PDF/A document.
$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);
// Step 4 — save. PdfAManager emits OutputIntent + ICC + XMP here.
$doc->save($out);
} catch (InvalidConfigException $e) {
fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n");
exit(1);
}
// Step 5 — the gate. veraPDF, not the library, asserts conformance.
$exitCode = 0;
$output = [];
exec('verapdf --flavour 4 ' . escapeshellarg($out), $output, $exitCode);
if ($exitCode !== 0) {
fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n");
fwrite(STDERR, implode("\n", $output) . "\n");
exit(1);
}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDF\n";

عند نجاح ⁨veraPDF⁩:

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

عند غياب حزمة ⁨Premium⁩، يخرج البرنامج النصي برمز غير صفري مع رسالة قابلة للتنفيذ، ولا يكتب أي ملف.

  • بوابة ⁨Premium.⁩ في التثبيت المقتصر على ⁨Core⁩، يطرح enablePdfA() الاستثناء InvalidConfigException الذي يذكر security.pdfa ويقدّم الإجراء العلاجي composer require nextpdf/pro. افحص السجلّ أولًا.
  • تعارض التشفير. يؤدّي استدعاء setEncryption() أو useAesGcm() أو setPublicKeyEncryption() على مستند ⁨PDF/A⁩ إلى إطلاق استثناء عدم توافق في أيٍّ من ترتيبَي الاستدعاء. يحظر ⁨PDF/A⁩ مفتاح المُذيَّل Encrypt.
  • صيغة المطابقة. مرّر PdfAVersion إلى enablePdfA() للحصول على 4e أو 4f. القيمة الافتراضية هي 4.
  • البوابة هي المُدقِّق، لا المحرّك. نجاح save() يعني أن ⁨NextPDF⁩ أصدر العناصر المُنتَجة التي يتطلّبها ⁨PDF/A-4.⁩ لكنه لا يُثبت المطابقة بحد ذاته. ‏⁨veraPDF⁩ هو من يؤكّد المطابقة؛ وتجعل هذه الوصفة حُكمه بوابةً. لا تُصرّح بأن أي ملف مطابق لـ ⁨PDF/A-4⁩ حتى ينجح المُدقِّق.
العبارةالمواصفةالبند⁨reference_id⁩
يجوز لملف ⁨PDF/A-4⁩ أن يحدّد خصائص ألوانه عبر ⁨OutputIntent⁩ خاص بـ ⁨PDF/A⁩ يشير إلى ملف تعريف مضمَّن للاتحاد الدولي للألوان (⁨ICC⁩). ويمكن بدلًا من ذلك تحديد الألوان المستقلة عن الجهاز مباشرةً؛ §6.2.4.1.⁨ISO 19005-4⁩§6.2.3
التشفير محظور في ⁨PDF/A-4.⁩⁨ISO 19005-4⁩§6.6.4
‏⁨PDF/A-4⁩ يحمل تعريف ⁨pdfaid⁩ في البيانات الوصفية لمنصّة البيانات الوصفية القابلة للتوسيع (⁨XMP⁩).⁨ISO 19005-4⁩§6.7.5

المُدقِّق هو من يؤكّد المطابقة. تُنتج المكتبة مخرجات يُقصد بها أن تكون مطابِقة، والمُدقِّق هو من يقرّر.