Tạo đầu ra PDF/A-4 và dùng oracle veraPDF làm cổng kiểm soát
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”Bài hướng dẫn này tạo đầu ra Portable Document Format/Archive (PDF/A-4) bằng PdfAManager trong bản Premium, chạy veraPDF, rồi dùng phán quyết của công cụ đó làm cổng kiểm soát bản dựng. NextPDF tạo các artifact; trình kiểm tra mới là bên quyết định mức độ tuân thủ. Quy trình này dựa trên examples/32-pdfa4-icc.php.
Điều kiện tiên quyết
Phần tiêu đề “Điều kiện tiên quyết”- Đã cài đặt Core:
composer require nextpdf/core:^3. - Đã cài đặt Premium:
composer require nextpdf/pro. PDF/A-4 là một tính năng thuộc gói Premium (Architecture Decision Record ADR-011). Nếu thiếu Premium,enablePdfA()sẽ ném raInvalidConfigExceptionkèm theo hướng dẫn nâng cấp. - veraPDF có trên
PATHđể chạy bước kiểm soát.
Công thức
Phần tiêu đề “Công thức”- Kiểm tra registry năng lực để tìm
security.pdfa, nhờ đó bản cài đặt chỉ có Core hiển thị thông báo rõ ràng thay vì một stack trace. - Tạo tài liệu, sau đó gọi
enablePdfA()trước khi thêm nội dung. - Thiết lập metadata và ghi nội dung. Đừng gọi
setEncryption(); PDF/A cấm khóaEncrypt. - Lưu tài liệu. Trong quá trình
save(),PdfAManagerlên lịch tạo OutputIntent, hồ sơ International Color Consortium (ICC) được nhúng và các lược đồ mở rộng Extensible Metadata Platform (XMP). - Chạy
verapdf --flavour 4trên đầu ra. Hãy để bản dựng thất bại nếu lệnh thoát với mã khác 0. Phán quyết của trình kiểm tra chính là cổng kiểm soát.
Ví dụ đầy đủ
Phần tiêu đề “Ví dụ đầy đủ”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
$out = __DIR__ . '/archival.pdf';
// Step 1 — probe before activating a Premium-gated feature.$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);}
try { $doc = Document::createStandalone();
// Step 2 — enable PDF/A-4 before content. Defaults to PdfA4. $doc->enablePdfA();
// Step 3 — metadata and content. No setEncryption() on a PDF/A document. $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);
// Step 4 — save. PdfAManager emits OutputIntent + ICC + XMP here. $doc->save($out);} catch (InvalidConfigException $e) { fwrite(STDERR, "PDF/A-4 activation failed: {$e->getMessage()}\n"); exit(1);}
// Step 5 — the gate. veraPDF, not the library, asserts conformance.$exitCode = 0;$output = [];exec('verapdf --flavour 4 ' . escapeshellarg($out), $output, $exitCode);
if ($exitCode !== 0) { fwrite(STDERR, "veraPDF FAILED — output is not PDF/A-4 conforming\n"); fwrite(STDERR, implode("\n", $output) . "\n"); exit(1);}
echo "veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDF\n";Đầu ra mong đợi
Phần tiêu đề “Đầu ra mong đợi”Khi veraPDF vượt qua:
veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDFKhi thiếu gói Premium, tập lệnh thoát với mã khác 0, kèm thông báo nêu rõ cách xử lý, và không ghi tệp.
Trường hợp đặc biệt
Phần tiêu đề “Trường hợp đặc biệt”- Cổng Premium. Trong bản cài đặt chỉ có Core,
enablePdfA()ném raInvalidConfigExceptionnêu rõsecurity.pdfavà đưa ra cách khắc phụccomposer require nextpdf/pro. Hãy kiểm tra registry trước. - Xung đột mã hóa. Việc gọi
setEncryption(),useAesGcm()hoặcsetPublicKeyEncryption()trên một tài liệu PDF/A đều sẽ phát sinh exception về tính không tương thích, bất kể thứ tự gọi. PDF/A cấm khóaEncrypttrong trailer. - Biến thể tuân thủ. Truyền một
PdfAVersionchoenablePdfA()để dùng4ehoặc4f. Mặc định là4. - Cổng kiểm soát là trình kiểm tra, không phải engine. Việc
save()thành công có nghĩa là NextPDF đã tạo ra các artifact mà PDF/A-4 yêu cầu. Bản thân điều đó không chứng minh được mức độ tuân thủ. veraPDF mới khẳng định mức độ tuân thủ; công thức này lấy phán quyết của nó làm cổng kiểm soát. Đừng tuyên bố rằng một tệp tuân thủ PDF/A-4 cho đến khi trình kiểm tra vượt qua.
Tuân thủ
Phần tiêu đề “Tuân thủ”| Tuyên bố | Tiêu chuẩn | Điều khoản | reference_id |
|---|---|---|---|
| Một tệp PDF/A-4 có thể chỉ định đặc tính màu bằng một PDF/A OutputIntent tham chiếu đến hồ sơ International Color Consortium (ICC) được nhúng. Màu độc lập với thiết bị cũng có thể được chỉ định trực tiếp; §6.2.4.1. | ISO 19005-4 | §6.2.3 | |
| Mã hóa bị cấm trong PDF/A-4. | ISO 19005-4 | §6.6.4 | |
| PDF/A-4 chứa định danh pdfaid trong metadata Extensible Metadata Platform (XMP). | ISO 19005-4 | §6.7.5 |
Trình kiểm tra xác nhận mức độ tuân thủ. Thư viện tạo đầu ra được thiết kế để tuân thủ; trình kiểm tra mới là bên quyết định.