ความสอดคล้องของ 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) เอนจิน Premium nextpdf/pro สร้าง OutputIntent โปรไฟล์ ICC ที่ฝังไว้ และสกีมาสำหรับระบุ pdfaid ของ Extensible Metadata Platform (XMP) ระหว่างการเรียก save() ไลบรารีสร้างอาร์ติแฟกต์ ส่วน veraPDF เป็นผู้ตัดสินความสอดคล้อง ISO 19005-4 §6.7.3 ระบุไว้อย่างชัดเจนว่าคุณสมบัติ pdfaid:part/pdfaid:rev “ไม่ได้กำหนดความสอดคล้องด้วยตัวเอง”
การติดตั้ง
หัวข้อที่มีชื่อว่า “การติดตั้ง”composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringCore ลงทะเบียนความสามารถ security.pdfa แต่จะรายงานว่าความสามารถนี้ไม่พร้อมใช้งานหากไม่มี nextpdf/pro ในกรณีนั้น enablePdfA() จะโยน InvalidConfigException พร้อมแนวทางการอัปเกรด แทนที่จะสร้างไฟล์ที่ไม่สอดคล้อง
ภาพรวมเชิงแนวคิด
หัวข้อที่มีชื่อว่า “ภาพรวมเชิงแนวคิด”Document::enablePdfA(?object $version = null) แมปอินพุตของ enum PdfAVersion ไปยังเคส ConformanceMode ค่าเริ่มต้นจะเป็น ConformanceMode::PdfA4 สำหรับอินพุตที่ไม่รู้จัก ('4e' → PdfA4e, '4f' → PdfA4f) โหมดนี้กำหนดภาระการสร้างสามอย่างสำหรับไฟล์ที่สอดคล้อง:
- OutputIntent + ICC — §6.2.3 อนุญาตให้ไฟล์ที่สอดคล้องระบุคุณลักษณะด้านสีของตนด้วย OutputIntent ของ PDF/A-4 ที่อ้างอิงสตรีม ICC ของ International Color Consortium (ICC) แบบ
DestOutputProfileตาม §6.2.4.1 นี่เป็นหนึ่งในสองเส้นทางที่อนุญาตสำหรับสีที่ไม่ขึ้นกับอุปกรณ์ (อีกเส้นทางหนึ่งคือการระบุพื้นที่สีที่ไม่ขึ้นกับอุปกรณ์โดยตรง) OutputIntent เป็นเส้นทางที่ NextPDF เลือกใช้ ไม่ใช่ข้อกำหนดแบบไม่มีเงื่อนไขของมาตรฐาน - การระบุด้วย
pdfaid— §6.7.3 กำหนดให้มีสกีมาสำหรับระบุ PDF/A ใน XMP ระดับเอกสาร (เนมสเปซpdfaidของ AIIM) พร้อมpdfaid:part/pdfaid:revPDF/A-4e และ PDF/A-4f ยังตั้งค่าpdfa:conformance(E / F) ด้วย §6.7.3 ระบุว่าไฟล์ที่ไม่สอดคล้องกับทั้งสองโหมดจะต้องไม่ระบุค่าpdfa:conformance - การฝังฟอนต์ — §6.2.10 กำหนดให้ฝังฟอนต์ทั้งหมดที่ใช้ในการเรนเดอร์
NextPDF สร้างอาร์ติแฟกต์เหล่านี้ แต่ไม่ได้พิจารณาความสอดคล้องตาม §5 หน้าที่ดังกล่าวเป็นของ veraPDF และ §6.7.3 สงวนการพิจารณานี้ไว้ให้กระบวนการดังกล่าว
พื้นผิว API
หัวข้อที่มีชื่อว่า “พื้นผิว API”| เมท็อด | ผลลัพธ์ |
|---|---|
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 กับเอาต์พุต และทำให้บิลด์ล้มเหลวเมื่อ exit ไม่เป็นศูนย์ คำตัดสินของตัวตรวจสอบคือเกต ส่วนสิ่งที่ไลบรารีสร้างคืออินพุตสำหรับเกตนั้น ไม่ใช่ตัวคำตัดสินเอง ดู /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() งบประมาณประสิทธิภาพคือ wall ≤ 1500 ms และพีค ≤ 128 MB สำหรับเอกสารทั่วไป
หมายเหตุด้านความปลอดภัย
หัวข้อที่มีชื่อว่า “หมายเหตุด้านความปลอดภัย”PDF/A-4 ห้ามการเข้ารหัสลับ โปรไฟล์นี้เป็นข้อจำกัดด้านการเก็บถาวรและความคงทน ไม่ใช่กลไกควบคุมด้านความปลอดภัย การดูแลรักษาคีย์และนโยบายของผู้ตรวจสอบอยู่นอกขอบเขตของโปรไฟล์นี้ ดูรายละเอียดได้ที่ ศูนย์ความเชื่อถือ
ถิ่นที่อยู่ของข้อมูลและการลดความเสี่ยง PII
หัวข้อที่มีชื่อว่า “ถิ่นที่อยู่ของข้อมูลและการลดความเสี่ยง PII”การสร้าง PDF/A-4 ทำงานภายในกระบวนการ และเขียนเฉพาะเอกสาร โปรไฟล์ ICC ที่ฝังไว้ และแพ็กเก็ต XMP เท่านั้น ไม่มีเนื้อหาใดออกนอกกระบวนการ ข้อมูลที่ระบุตัวบุคคลได้ (PII) ในเนื้อหาต้นทางเป็นความรับผิดชอบของผู้ผสานระบบ โปรไฟล์นี้ไม่ได้ปกปิดข้อมูล
การวัดและส่งข้อมูลอย่างปลอดภัยและการล้างล็อก
หัวข้อที่มีชื่อว่า “การวัดและส่งข้อมูลอย่างปลอดภัยและการล้างล็อก”ตัวอย่างนี้เขียนเฉพาะพาธของเอาต์พุตและคำสั่งของตัวตรวจสอบไปยัง STDERR เท่านั้น โดยไม่บันทึกไบต์ของเอกสารใดๆ สูตรนี้เคารพ NEXTPDF_COOKBOOK_OUTPUT และไม่เคยส่งออก PDF ไปยัง STDOUT
แบบจำลองภัยคุกคาม
หัวข้อที่มีชื่อว่า “แบบจำลองภัยคุกคาม”ไฟล์ PDF/A-4 ไม่มีการควบคุมการเข้าถึง ผู้ที่มีไฟล์สามารถอ่านได้ โปรไฟล์นี้รองรับความคงทนในการเรนเดอร์ ไม่ใช่การรักษาความลับ ให้ถือว่าสตรีม ICC ของ OutputIntent เป็นข้อมูลสาธารณะ
พฤติกรรมในโหมด FIPS
หัวข้อที่มีชื่อว่า “พฤติกรรมในโหมด FIPS”การสร้าง 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 ไม่ได้กำหนดความสอดคล้องด้วยตัวเอง การพิจารณาดำเนินการตาม Clause 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 |
การอ้างอิงใช้ clause-id ร่วมกับตัวชี้ reference_id ที่ชี้เข้าไปยังคอร์ปัสการตรวจสอบ ไม่มีการนำข้อความของมาตรฐานมาแสดงซ้ำ NextPDF สรุปข้อต่างๆ ด้วยถ้อยคำของตนเอง