ข้ามไปยังเนื้อหา

สร้างเอาต์พุต PDF/A-4 และตั้งเกตด้วยออราเคิล veraPDF

บทแนะนำนี้สร้างเอาต์พุต Portable Document Format/Archive (PDF/A-4) ด้วย Premium PdfAManager รัน veraPDF และใช้คำตัดสินของ veraPDF เป็นเกตสำหรับการบิลด์ NextPDF เป็นผู้เขียนสิ่งประดิษฐ์ ส่วนตัวตรวจสอบความถูกต้องเป็นผู้ตัดสินความสอดคล้อง ลำดับการทำงานสอดคล้องกับตัวอย่างนี้: examples/32-pdfa4-icc.php

  • ติดตั้ง Core ด้วย composer require nextpdf/core:^3
  • ติดตั้ง Premium: composer require nextpdf/pro PDF/A-4 เป็นฟีเจอร์ระดับ Premium (Architecture Decision Record ADR-011) หากไม่มี Premium enablePdfA() จะโยน InvalidConfigException พร้อมแนวทางการอัปเกรด
  • veraPDF พร้อมใช้งานบน PATH สำหรับขั้นตอนเกต
  1. ตรวจสอบรีจิสทรีความสามารถสำหรับ security.pdfa เพื่อให้การติดตั้งแบบ Core-only แสดงข้อความที่ชัดเจนแทน stack trace
  2. สร้างเอกสาร แล้วเรียก enablePdfA() ก่อนเพิ่มเนื้อหา
  3. ตั้งค่าเมทาดาทาและเขียนเนื้อหา อย่าเรียก setEncryption() เนื่องจาก PDF/A ห้ามใช้ Encrypt เป็นคีย์
  4. บันทึกเอกสาร ระหว่าง save() PdfAManager จะจัดเตรียม OutputIntent โปรไฟล์ International Color Consortium (ICC) ที่ฝังไว้ และสกีมาส่วนขยาย Extensible Metadata Platform (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-only enablePdfA() จะโยน InvalidConfigException ที่ระบุชื่อ security.pdfa และให้วิธีแก้ไข composer require nextpdf/pro ให้ตรวจสอบรีจิสทรีก่อน
  • ความขัดแย้งของการเข้ารหัสลับ การเรียก setEncryption() useAesGcm() หรือ setPublicKeyEncryption() บนเอกสาร PDF/A จะทำให้เกิดข้อยกเว้นความไม่เข้ากัน ไม่ว่าจะเรียกในลำดับใด PDF/A ห้ามใช้ Encrypt ซึ่งเป็นคีย์ของ trailer
  • รูปแบบย่อยของความสอดคล้อง ส่ง PdfAVersion ให้กับ enablePdfA() สำหรับ 4e หรือ 4f ค่าเริ่มต้นคือ 4
  • เกตคือตัวตรวจสอบความถูกต้อง ไม่ใช่เอนจิน การ save() ที่สำเร็จหมายความว่า NextPDF ได้ปล่อยสิ่งประดิษฐ์ที่ PDF/A-4 กำหนดไว้ การเรียก save() เพียงอย่างเดียวไม่ได้พิสูจน์ความสอดคล้อง veraPDF เป็นผู้ยืนยันความสอดคล้อง สูตรนี้ทำให้คำตัดสินของ veraPDF เป็นเกต อย่าระบุว่าไฟล์สอดคล้องกับ PDF/A-4 จนกว่าตัวตรวจสอบความถูกต้องจะผ่าน
ข้อความระบุข้อกำหนดข้อรหัสอ้างอิง (reference_id)
ไฟล์ PDF/A-4 อาจ ระบุคุณลักษณะของสีด้วย PDF/A OutputIntent ที่อ้างอิงโปรไฟล์ International Color Consortium (ICC) ที่ฝังไว้ อีกทางหนึ่ง สีที่ไม่ขึ้นกับอุปกรณ์สามารถระบุได้โดยตรงตาม §6.2.4.1ISO 19005-4§6.2.3
PDF/A-4 ห้ามใช้การเข้ารหัสลับISO 19005-4§6.6.4
PDF/A-4 เก็บการระบุตัวตน pdfaid ไว้ในเมทาดาทา Extensible Metadata Platform (XMP)ISO 19005-4§6.7.5

ตัวตรวจสอบความถูกต้องเป็นผู้ยืนยันความสอดคล้อง ไลบรารีสร้างเอาต์พุตที่ตั้งเป้าให้สอดคล้อง ส่วนตัวตรวจสอบความถูกต้องเป็นผู้ตัดสิน