Bỏ qua để đến nội dung

Tạo đầu ra PDF/A-4 để lưu trữ

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.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro

PDF/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.

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()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 được tạo từ PHPDoc. Dùng các điểm vào chính sau:

  • \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|nullConformanceMode::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";

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 conforming

Trê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.

  • Cổng Pro. Với bản cài đặt chỉ có Core, enablePdfA() ném ra InvalidConfigException. Thông báo nêu rõ security.pdfa và cách khắc phục composer 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ặc setPublicKeyEncryption() 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 trailer Encrypt (ISO 19005-4 §6.6.4).
  • Biến thể tuân thủ. Truyền Pro PdfAVersion vào enablePdfA() để dùng 4e (kỹ thuật, 3D) hoặc 4f (tệp đính kèm). Hồ sơ cơ sở không phát ra giá trị pdfa:conformance; 4e/4f đặt E/F. Bộ phân biệt ConformanceMode giữ cho pdfaid:part nhấ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.

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ô.

Đầ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.

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.

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.

Phát biểuĐặc tảĐiều khoảnreference_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.