Tạo đầu ra PDF/A-4 để lưu trữ
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Dùng công thức này để tạo đầu ra PDF/A-4 dùng cho lưu trữ (International Organization for Standardization (ISO) 19005-4) bằng Pro PdfAManager. Khi lưu, NextPDF thiết lập OutputIntent, hồ sơ International Color Consortium (ICC) được nhúng và siêu dữ liệu nhận dạng. NextPDF tạo đầu ra hướng tới tuân thủ; trình xác thực độc lập sẽ quyết định mức tuân thủ. Công thức này dựa trên examples/32-pdfa4-icc.php.
Cài đặt
Phần tiêu đề “Cài đặt”composer require nextpdf/core:^3composer require nextpdf/proPDF/A-4 là một tính năng của gói Pro. Với bản cài đặt chỉ có Core, enablePdfA() phát sinh InvalidConfigException. Thông báo nêu rõ tính năng security.pdfa còn thiếu và chỉ ra cách khắc phục composer require nextpdf/pro. Để xác minh, bạn cần có một trình xác thực PDF/A trong PATH. Các ví dụ dùng veraPDF với --flavour 4.
Tổng quan khái niệm
Phần tiêu đề “Tổng quan khái niệm”PDF/A-4 là hồ sơ lưu trữ ISO 19005-4 được xây dựng trên ISO 32000-2 (PDF 2.0). Một tệp tuân thủ có màu sắc tất định và hoàn toàn tự chứa. Tệp khai báo một OutputIntent tham chiếu đến một hồ sơ đích ICC được nhúng, nhờ đó màu sắc có thể được tái tạo mà không cần tài nguyên bên ngoài (§6.2.3). Mọi chương trình phông chữ đều được nhúng (§6.2.10.4.1). Tài liệu chứa siêu dữ liệu nhận dạng pdfaid trong Extensible Metadata Platform (XMP) (§6.7.3). Tệp không được mã hóa (§6.6.4 — PDF/A cấm khóa trailer Encrypt).
NextPDF mô hình hóa PDF/A bằng enum ConformanceMode có kiểu rõ ràng. enablePdfA() khởi tạo Pro PdfAManager và mặc định dùng ConformanceMode::PdfA4. Trong quá trình save(), trình quản lý phát ra OutputIntent, luồng ICC và các lược đồ mở rộng XMP. Các phương thức phân biệt pdfaPart() và pdfaConformanceLetter() giữ cho siêu dữ liệu pdfaid:part / pdfaid:conformance khớp với biến thể đã chọn (cơ sở 4, 4e, 4f). Hồ sơ cơ sở không phát ra giá trị pdfa:conformance, đúng theo yêu cầu của phần này.
Bề mặt API
Phần tiêu đề “Bề mặt API”Bề mặt API được tạo từ PHPDoc. Dùng các điểm vào chính sau:
\NextPDF\Core\Document::createStandalone(): DocumentDocument::enablePdfA(?object $version = null): static\NextPDF\Support\CapabilityRegistry::getInstance()->get('security.pdfa')->isAvailable(): bool\NextPDF\Conformance\ConformanceMode::PdfA4/PdfA4e/PdfA4fConformanceMode::pdfaPart(): 2|3|4|nullvàConformanceMode::pdfaConformanceLetter(): string
Mã mẫu — bắt đầu nhanh
Phần tiêu đề “Mã mẫu — bắt đầu nhanh”<?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";Mã mẫu — bản phát hành
Phần tiêu đề “Mã mẫu — bản phát hành”Dùng chương trình độc lập này trong bộ khung kiểm thử. Trong môi trường phát hành, hãy biến phán quyết của trình xác thực thành cổng kiểm soát quá trình dựng. Một lần gọi save() thành công cho thấy NextPDF đã phát ra các phần tử; chỉ trình xác thực mới chứng minh được mức tuân thủ.
<?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";Trên máy chủ đã cài nextpdf/pro và có verapdf báo rằng tệp tuân thủ, đầu ra chuẩn (STDOUT) mong đợi là:
veraPDF PASS — archival.pdf is reported PDF/A-4 conformingTrên máy chủ chỉ có Core, chương trình thoát với mã khác 0 sau khi ghi PDF/A-4 requires nextpdf/pro. Run: composer require nextpdf/pro ra lỗi chuẩn (STDERR). Nếu verapdf báo có vấn đề, chương trình thoát với mã khác 0 sau veraPDF FAILED — output is not PDF/A-4 conforming. Cách diễn đạt này giao phán quyết cho veraPDF; NextPDF không khẳng định mức tuân thủ PDF/A-4.
Trường hợp biên & điểm cần lưu ý
Phần tiêu đề “Trường hợp biên & điểm cần lưu ý”- Cổng Pro. Với bản cài đặt chỉ có Core,
enablePdfA()ném raInvalidConfigException. Thông báo nêu rõsecurity.pdfavà cách khắc phụccomposer require nextpdf/pro. Hãy thăm dò registry trước để hiển thị thông báo rõ ràng cho người vận hành. - Xung đột mã hóa. Nếu bạn gọi
setEncryption(),useAesGcm(), hoặcsetPublicKeyEncryption()trên một tài liệu PDF/A, NextPDF phát sinh ngoại lệ không tương thích bất kể thứ tự gọi. PDF/A-4 cấm khóa trailerEncrypt(ISO 19005-4 §6.6.4). - Biến thể tuân thủ. Truyền Pro
PdfAVersionvàoenablePdfA()để dùng4e(kỹ thuật, 3D) hoặc4f(tệp đính kèm). Hồ sơ cơ sở không phát ra giá trịpdfa:conformance;4e/4fđặtE/F. Bộ phân biệtConformanceModegiữ chopdfaid:partnhất quán. - Việc gắn thẻ là độc lập. PDF/A-4 cơ sở coi việc gắn thẻ là tùy chọn. Với sản phẩm vừa cần khả năng tiếp cận vừa cần lưu trữ, hãy bật chế độ gắn thẻ và PDF/A riêng rẽ; xem công thức PDF/UA-2.
- Cổng kiểm soát chính là trình xác thực. Một lần gọi
save()thành công nghĩa là các phần tử đã được phát ra, không phải là tệp đã tuân thủ. Đừng tuyên bố tuân thủ PDF/A-4 cho đến khi trình xác thực thông qua.
Hiệu năng
Phần tiêu đề “Hiệu năng”OutputIntent thêm một luồng hồ sơ ICC (vài trăm KB cho sRGB) cùng với gói XMP. Việc nhúng phông chữ là yếu tố chính chi phối kích thước khi tài liệu dùng phông chữ ngoài bộ base-14. Với các tài liệu lưu trữ thông thường, công thức này nằm trong ngân sách 2000 ms / 128 MB. Áp dụng hồ sơ tái lập ngữ nghĩa: so sánh sản phẩm hướng tới trình xác thực bằng cây cú pháp trừu tượng (AST) về cấu trúc và siêu dữ liệu, thay vì so sánh byte thô.
Lưu ý về bảo mật
Phần tiêu đề “Lưu ý về bảo mật”Lưu trú dữ liệu & giảm thiểu PII
Phần tiêu đề “Lưu trú dữ liệu & giảm thiểu PII”Đầu ra lưu trữ vốn được thiết kế để tồn tại lâu dài và độc lập hoàn toàn. Mọi dữ liệu cá nhân trong nội dung sẽ tồn tại trong suốt vòng đời của kho lưu trữ. Hồ sơ ICC được nhúng và siêu dữ liệu đi kèm tệp. Hãy áp dụng chính sách lưu giữ và tối thiểu hóa trước khi lưu trữ. PDF/A-4 không có ngữ nghĩa che bỏ nội dung (redaction).
An toàn đo lường từ xa & làm sạch nhật ký
Phần tiêu đề “An toàn đo lường từ xa & làm sạch nhật ký”Công thức này chỉ ghi một dòng tiến trình cố định. Đầu ra của veraPDF có thể chứa các đoạn nội dung; với tài liệu nhạy cảm, hãy giữ nhật ký của trình xác thực tách khỏi các đích nhật ký dùng chung.
Mô hình mối đe dọa
Phần tiêu đề “Mô hình mối đe dọa”PDF/A-4 là hồ sơ về độ trung thực khi lưu trữ, không phải là biện pháp kiểm soát tính toàn vẹn hay tính xác thực. Nó không ký tệp và cũng không làm cho hành vi giả mạo trở nên rõ ràng. Hãy kết hợp nó với một chữ ký khi nguồn gốc là điều quan trọng. Một công thức riêng sẽ đề cập đến chữ ký. Theo đặc tả, mã hóa loại trừ lẫn nhau với PDF/A.
Hành vi ở chế độ FIPS
Phần tiêu đề “Hành vi ở chế độ FIPS”Công thức này không thực hiện thao tác mật mã nào. Chế độ Federal Information Processing Standards (FIPS) không thay đổi hành vi của nó. PDF/A-4 cấm mã hóa, vì vậy không có thuật toán mật mã nào được chọn.
Tuân thủ
Phần tiêu đề “Tuân thủ”| Phát biểu | Đặc tả | Điều khoản | reference_id |
|---|---|---|---|
| PDF/A-4 yêu cầu một OutputIntent tham chiếu đến một hồ sơ ICC được nhúng. | ISO 19005-4 | §6.2.3 | |
| Màu độc lập với thiết bị thông qua hồ sơ đích đầu ra. | ISO 19005-4 | §6.2.4.3 | |
| Mọi chương trình phông chữ đều được nhúng. | ISO 19005-4 | §6.2.10.4.1 | |
| Tài liệu mang thông tin nhận dạng pdfaid trong XMP. | ISO 19005-4 | §6.7.3 | |
| Mã hóa bị cấm trong PDF/A-4. | ISO 19005-4 | §6.6.4 | |
| Trình xác thực, chứ không phải bên tạo ra, quyết định mức tuân thủ. | ISO 19005-4 | §6.7.3 |
NextPDF tạo đầu ra hướng tới tuân thủ PDF/A-4. Hỗ trợ không phải là tuân thủ; một hồ sơ đã được kiểm thử không phải là chứng nhận. Công thức này không khẳng định mức tuân thủ; trình xác thực độc lập, chẳng hạn veraPDF, sẽ đưa ra phán quyết đó. Hãy biến phán quyết của nó thành cổng kiểm soát quá trình dựng.