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

สร้างเอกสาร PDF/A-4 สำหรับการเก็บถาวร

ใช้สูตรนี้เพื่อสร้างเอกสาร PDF/A-4 สำหรับการเก็บถาวร (International Organization for Standardization (ISO) 19005-4) ด้วย PdfAManager ของรุ่น Pro เมื่อบันทึกไฟล์ NextPDF จะกำหนดให้มี OutputIntent โปรไฟล์ International Color Consortium (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 ไว้ใน Extensible Metadata Platform (XMP) (§6.7.3) ไฟล์จะไม่ถูกเข้ารหัสลับ (§6.6.4 — PDF/A ห้ามใช้คีย์ trailer Encrypt)

NextPDF ใช้ enum แบบระบุชนิดชัดเจน ConformanceMode เพื่อแทน PDF/A enablePdfA() จะสร้างอินสแตนซ์ของ PdfAManager ของรุ่น Pro และมีค่าเริ่มต้นเป็น ConformanceMode::PdfA4 ระหว่าง save() ตัวจัดการจะกำหนดให้มี OutputIntent สตรีม ICC และสกีมาส่วนขยาย XMP ตัวจำแนก pdfaPart() และ pdfaConformanceLetter() จะรักษาเมตาดาตา pdfaid:part / pdfaid:conformance ให้สอดคล้องกับตัวแปรย่อยที่เลือก (base 4, 4e, 4f) โปรไฟล์ base จะไม่ปล่อยตัวอักษร pdfa:conformance ตามข้อกำหนดของ part

พื้นผิว application programming interface (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";

ใช้โปรแกรมที่ครบถ้วนในตัวเองนี้ภายใน harness สำหรับการใช้งานจริง ให้ใช้คำตัดสินของตัวตรวจสอบความถูกต้องเป็นด่านตรวจของการบิลด์ การที่ 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 ห้ามใช้คีย์ trailer Encrypt (ISO 19005-4 §6.6.4)
  • ตัวแปรย่อยของความสอดคล้อง ส่ง PdfAVersion ของรุ่น Pro ไปยัง enablePdfA() สำหรับ 4e (งานวิศวกรรม 3D) หรือ 4f (ไฟล์แนบ) โปรไฟล์ base จะไม่ปล่อยตัวอักษร pdfa:conformance ส่วน 4e/4f จะตั้งค่าเป็น E/F ตัวจำแนก ConformanceMode จะรักษา pdfaid:part ให้สอดคล้องกัน
  • การทำแท็กเป็นอิสระต่อกัน PDF/A-4 base ถือว่าการทำแท็กเป็นทางเลือก สำหรับผลงานส่งมอบที่ต้องทั้งเข้าถึงได้และเก็บถาวรได้ ให้เปิดใช้งานโหมด tagged และ PDF/A แยกกัน ดูสูตร PDF/UA-2
  • ตัวตรวจสอบความถูกต้องคือด่านตรวจ การที่ save() สำเร็จหมายความว่ามีการสร้างอาร์ติแฟกต์ออกมาแล้ว ไม่ได้หมายความว่าไฟล์สอดคล้องตามมาตรฐาน อย่าระบุว่าสอดคล้อง PDF/A-4 จนกว่าตัวตรวจสอบความถูกต้องจะผ่าน

OutputIntent จะเพิ่มสตรีมโปรไฟล์ ICC หนึ่งสตรีม (ไม่กี่ร้อย KB สำหรับ sRGB) รวมถึงแพ็กเก็ต XMP การฝังฟอนต์เป็นปัจจัยหลักที่กำหนดขนาด เมื่อเอกสารใช้ฟอนต์ที่ไม่ใช่ base-14 สำหรับเอกสารเก็บถาวรทั่วไป สูตรนี้อยู่ภายในงบประมาณ 2000 ms / 128 MB โปรไฟล์การทำซ้ำเชิงความหมายมีผลบังคับใช้: ให้เปรียบเทียบผลงานส่งมอบที่มุ่งเน้นตัวตรวจสอบความถูกต้องด้วยโครงสร้าง abstract syntax tree (AST) ร่วมกับเมตาดาตา แทนการเปรียบเทียบไบต์ดิบ

ถิ่นที่อยู่ของข้อมูลและการบรรเทาความเสี่ยง PII

หัวข้อที่มีชื่อว่า “ถิ่นที่อยู่ของข้อมูลและการบรรเทาความเสี่ยง PII”

เอกสารสำหรับการเก็บถาวรได้รับการออกแบบให้มีอายุยืนยาวและครบถ้วนในตัวเอง ข้อมูลส่วนบุคคลใดๆ ในเนื้อหาจะคงอยู่ตลอดอายุของเอกสารที่เก็บถาวร โปรไฟล์ ICC ที่ฝังอยู่ในไฟล์และเมตาดาตาจะติดไปกับไฟล์ บังคับใช้นโยบายการเก็บรักษาและการลดข้อมูลให้น้อยที่สุดก่อนการเก็บถาวร PDF/A-4 ไม่ได้ให้ความหมายเชิงการลบข้อมูลที่อ่อนไหว

การวัดและส่งข้อมูลทางไกลอย่างปลอดภัยและการล้างข้อมูลบันทึก

หัวข้อที่มีชื่อว่า “การวัดและส่งข้อมูลทางไกลอย่างปลอดภัยและการล้างข้อมูลบันทึก”

สูตรนี้เขียนเฉพาะบรรทัดแสดงความคืบหน้าที่กำหนดตายตัวเท่านั้น ผลลัพธ์จาก veraPDF อาจมีส่วนย่อยของเนื้อหา สำหรับเอกสารที่มีเนื้อหาอ่อนไหว จึงควรเก็บบันทึกของตัวตรวจสอบความถูกต้องไว้นอกระบบรวบรวมบันทึกที่ใช้ร่วมกัน

PDF/A-4 เป็นโปรไฟล์สำหรับความเที่ยงตรงในการเก็บถาวร ไม่ใช่การควบคุมความสมบูรณ์หรือความถูกต้องแท้จริง PDF/A-4 ไม่ลงลายเซ็นในไฟล์ และไม่ทำให้การแก้ไขโดยมิชอบปรากฏชัด ให้ใช้ร่วมกับลายเซ็นเมื่อแหล่งที่มามีความสำคัญ มีสูตรแยกต่างหากที่กล่าวถึงลายเซ็น ส่วนการเข้ารหัสลับกับ PDF/A ใช้ร่วมกันไม่ได้ตามข้อกำหนด

สูตรนี้ไม่ดำเนินการเข้ารหัสลับใดๆ โหมด Federal Information Processing Standards (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 ไว้ใน XMPISO 19005-4§6.7.3
การเข้ารหัสลับเป็นสิ่งต้องห้ามใน PDF/A-4ISO 19005-4§6.6.4
ตัวตรวจสอบความถูกต้องเป็นผู้ตัดสินความสอดคล้อง ไม่ใช่ผู้ผลิตISO 19005-4§6.7.3

NextPDF สร้างเอกสารโดยมีเป้าหมายให้สอดคล้องกับ PDF/A-4 การรองรับไม่ใช่ความสอดคล้อง โปรไฟล์ที่ผ่านการทดสอบไม่ใช่การรับรอง สูตรนี้ไม่ได้ยืนยันความสอดคล้อง ตัวตรวจสอบความถูกต้องอิสระ เช่น veraPDF เป็นผู้ตัดสินเรื่องนั้น ให้ใช้คำตัดสินของตัวตรวจสอบความถูกต้องเป็นด่านตรวจของการบิลด์