สร้างเอาต์พุต 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/proPDF/A-4 เป็นฟีเจอร์ระดับ Premium (Architecture Decision Record ADR-011) หากไม่มี PremiumenablePdfA()จะโยนInvalidConfigExceptionพร้อมแนวทางการอัปเกรด - veraPDF พร้อมใช้งานบน
PATHสำหรับขั้นตอนเกต
สูตรการทำ
หัวข้อที่มีชื่อว่า “สูตรการทำ”- ตรวจสอบรีจิสทรีความสามารถสำหรับ
security.pdfaเพื่อให้การติดตั้งแบบ Core-only แสดงข้อความที่ชัดเจนแทน stack trace - สร้างเอกสาร แล้วเรียก
enablePdfA()ก่อนเพิ่มเนื้อหา - ตั้งค่าเมทาดาทาและเขียนเนื้อหา อย่าเรียก
setEncryption()เนื่องจาก PDF/A ห้ามใช้Encryptเป็นคีย์ - บันทึกเอกสาร ระหว่าง
save()PdfAManagerจะจัดเตรียม OutputIntent โปรไฟล์ International Color Consortium (ICC) ที่ฝังไว้ และสกีมาส่วนขยาย Extensible Metadata Platform (XMP) - รัน
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.1 | ISO 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 |
ตัวตรวจสอบความถูกต้องเป็นผู้ยืนยันความสอดคล้อง ไลบรารีสร้างเอาต์พุตที่ตั้งเป้าให้สอดคล้อง ส่วนตัวตรวจสอบความถูกต้องเป็นผู้ตัดสิน