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

Tuân thủ PDF/A-4: NextPDF phát ra gì theo ISO 19005-4

Tuyên bố về ranh giới. NextPDF tạo đầu ra hướng tới tuân thủ PDF/A-4. Thư viện không tự khẳng định tuân thủ; việc đó thuộc về trình kiểm định, chẳng hạn như veraPDF.

PDF/A-4 là ISO 19005-4:2020, hồ sơ lưu trữ dựa trên PDF 2.0. NextPDF Core cung cấp bộ phân biệt ConformanceMode (PdfA4, PdfA4e, PdfA4f). Engine Premium nextpdf/pro phát ra OutputIntent, hồ sơ ICC nhúng và lược đồ định danh pdfaid của Extensible Metadata Platform (XMP) khi save(). Thư viện tạo các artifact; veraPDF quyết định việc tuân thủ. ISO 19005-4 §6.7.3 nêu rõ: các thuộc tính pdfaid:part/pdfaid:rev “tự thân không quyết định sự tuân thủ”.

Terminal window
composer require nextpdf/core:^3
composer require nextpdf/pro # OutputIntent + ICC + XMP authoring

Core đăng ký năng lực security.pdfa, nhưng báo cáo là không khả dụng nếu không có nextpdf/pro. Trong trường hợp đó, enablePdfA() ném InvalidConfigException kèm theo lộ trình nâng cấp, thay vì phát ra một tệp không tuân thủ.

Document::enablePdfA(?object $version = null) ánh xạ đầu vào enum PdfAVersion sang một case của ConformanceMode. Mặc định là ConformanceMode::PdfA4 đối với đầu vào không được nhận diện ('4e' → PdfA4e, '4f' → PdfA4f). Chế độ này chi phối ba nghĩa vụ phải phát ra cho một tệp tuân thủ:

  • OutputIntent + ICC — §6.2.3 cho phép một tệp tuân thủ chỉ định các đặc tính màu của nó bằng một OutputIntent PDF/A-4 tham chiếu đến một luồng ICC (International Color Consortium) DestOutputProfile. Theo §6.2.4.1, đây là một trong hai cách được phép để có màu độc lập với thiết bị (cách còn lại là chỉ định trực tiếp các không gian màu độc lập với thiết bị). OutputIntent là cách NextPDF chọn, không phải yêu cầu vô điều kiện của tiêu chuẩn.
  • Định danh pdfaid — §6.7.3 yêu cầu lược đồ định danh PDF/A trong XMP cấp tài liệu (không gian tên pdfaid của AIIM) với pdfaid:part/pdfaid:rev. PDF/A-4e và PDF/A-4f cũng đặt pdfa:conformance (E / F). §6.7.3 nêu rằng một tệp không tuân thủ bất kỳ chế độ nào trong hai chế độ đó thì không được cung cấp giá trị pdfa:conformance.
  • Nhúng phông chữ — §6.2.10 yêu cầu tất cả phông chữ dùng để kết xuất phải được nhúng.

NextPDF phát ra các artifact này, nhưng không thực hiện việc xác định tuân thủ theo §5. Đó là vai trò của veraPDF; §6.7.3 dành việc xác định ấy cho quy trình đó.

Phương thứcTác dụng
enablePdfA(?object $version = null): staticĐịnh tuyến tới ConformanceMode::PdfA4/PdfA4e/PdfA4f; lên lịch OutputIntent + ICC + XMP tại save(). Ném InvalidConfigException|PageLayoutException|CompressionException if nextpdf/pro vắng mặt.
ConformanceMode::pdfaPart(): ?intTrả về phần ISO 19005 cho chế độ đang hoạt động (4 đối với PdfA4*).
ConformanceMode::pdfaConformanceLetter(): stringTrả về ký tự pdfa:conformance (E / F) hoặc rỗng.
<?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";

Dùng kết quả của trình kiểm định làm cổng build. Chạy verapdf --flavour 4 trên đầu ra, và cho build thất bại khi mã thoát khác không. Kết quả của trình kiểm định là cổng; đầu ra của thư viện chỉ là đầu vào cho cổng đó, không bao giờ là chính kết quả đánh giá. Xem /cookbook/php/pdfa4-conformance-gate/ để xem toàn bộ pipeline có cổng kiểm soát.

  • Bật trước khi thêm nội dung. Gọi enablePdfA() trước khi bạn thêm nội dung. Nếu bật sau đó, các đối tượng đã ghi sẽ không được xử lý lại.
  • Không mã hóa. PDF/A cấm khóa Encrypt. Đừng gọi setEncryption() trên một tài liệu PDF/A. Mã hóa là tính bảo mật, không phải tính toàn vẹn lưu trữ, và ở đây hai điều này loại trừ lẫn nhau.
  • pdfa:conformance là có điều kiện. Chỉ PDF/A-4e và PDF/A-4f mới đặt nó. Việc phát ra nó trên một tệp PDF/A-4 thuần túy tự nó là một vi phạm tuân thủ (§6.7.3) — case ConformanceMode được thiết kế để ngăn điều đó.
  • Tệp đính kèm PDF/A-4f. Các tệp nhúng trong một tệp PDF/A-4f phải mang khóa FUF (khuyến nghị có Desc) theo §6.7.5. Điều này hỗ trợ tuyến lai ZUGFeRD/Factur-X.

Việc nhúng OutputIntent + ICC thêm một luồng ICC có kích thước cố định (hồ sơ không gian làm việc) và gói XMP tại save(). Ngân sách là wall ≤ 1.500 ms và peak ≤ 128 MB cho một tài liệu điển hình.

PDF/A-4 cấm mã hóa. Hồ sơ này là một ràng buộc về lưu trữ và độ bền lâu dài, không phải một biện pháp kiểm soát bảo mật. Việc quản trị khóa và chính sách của trình xác minh nằm ngoài phạm vi của hồ sơ này; xem trung tâm tin cậy.

Quá trình phát ra PDF/A-4 chạy trong tiến trình và chỉ ghi tài liệu, hồ sơ ICC nhúng và gói XMP. Không có nội dung nào rời khỏi tiến trình. Thông tin định danh cá nhân (PII) trong nội dung nguồn là trách nhiệm của bên tích hợp. Hồ sơ này không thực hiện biên tập che (redact).

Ví dụ này chỉ ghi đường dẫn đầu ra và lệnh trình kiểm định vào STDERR. Nó không ghi bất kỳ byte tài liệu nào. Công thức này tôn trọng NEXTPDF_COOKBOOK_OUTPUT và không bao giờ in PDF ra STDOUT.

Một tệp PDF/A-4 không có kiểm soát truy cập. Bất kỳ ai có tệp đều có thể đọc nó. Hồ sơ này hỗ trợ độ bền kết xuất lâu dài, không phải tính bảo mật. Hãy coi luồng ICC OutputIntent là công khai.

Quá trình phát ra PDF/A-4 không thực hiện bất kỳ mã hóa nào. Chữ ký số trên một tệp PDF/A-4 (PDF/A-4 §6.5 cho phép các hồ sơ PAdES) thuộc phạm vi riêng của công thức chữ ký và kế thừa trạng thái FIPS của công thức đó. Trang này không đưa ra tuyên bố nào về việc ký.

Tuyên bốTiêu chuẩnĐiều khoảnreference_id
Một tệp PDF/A-4 có thể chỉ định các đặc tính màu của nó bằng một OutputIntent PDF/A tham chiếu đến một hồ sơ ICC DestOutputProfile.ISO 19005-4§6.2.3
Màu độc lập với thiết bị có thể được chỉ định trực tiếp hoặc gián tiếp qua OutputIntent DestOutputProfile (một trong hai cách được phép).ISO 19005-4§6.2.4.1
Phiên bản PDF/A được định danh bằng lược đồ định danh PDF/A (pdfaid) trong XMP tài liệu.ISO 19005-4§6.7.3
pdfaid:part / pdfaid:rev tự thân không quyết định sự tuân thủ; việc xác định được thực hiện theo Điều 5.ISO 19005-4§6.7.3
Một tệp không tuân thủ PDF/A-4e cũng như PDF/A-4f thì không được cung cấp giá trị pdfa:conformance.ISO 19005-4§6.7.3
Các tệp nhúng PDF/A-4f phải có khóa F và UF (khuyến nghị có Desc).ISO 19005-4§6.7.5
Tất cả phông chữ dùng để kết xuất phải được nhúng.ISO 19005-4§6.2.10
Việc sử dụng độ trong suốt / màu sắc phụ thuộc vào một OutputIntent đã khai báo.ISO 19005-4§6.2.9

Các trích dẫn gồm clause-id cùng với con trỏ reference_id trỏ vào kho ngữ liệu kiểm chứng. Không có văn bản tiêu chuẩn nào được sao chép lại; NextPDF tóm tắt các điều khoản bằng lời lẽ của riêng mình.