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

Tạo đầu ra PDF/A-4 và dùng oracle veraPDF làm cổng kiểm soát

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.

  • Đã 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 ra InvalidConfigException kèm theo hướng dẫn nâng cấp.
  • veraPDF có trên PATH để chạy bước kiểm soát.
  1. 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.
  2. Tạo tài liệu, sau đó gọi enablePdfA() trước khi thêm nội dung.
  3. Thiết lập metadata và ghi nội dung. Đừng gọi setEncryption(); PDF/A cấm khóa Encrypt.
  4. Lưu tài liệu. Trong quá trình save(), PdfAManager lê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).
  5. Chạy verapdf --flavour 4 trê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.
<?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";

Khi veraPDF vượt qua:

veraPDF PASS — archival.pdf is reported PDF/A-4 conforming by veraPDF

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

  • Cổng Premium. Trong bản cài đặt chỉ có Core, enablePdfA() ném ra InvalidConfigException nêu rõ security.pdfa và đưa ra cách khắc phục composer require nextpdf/pro. Hãy kiểm tra registry trước.
  • Xung đột mã hóa. Việc gọi setEncryption(), useAesGcm() hoặc setPublicKeyEncryption() 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óa Encrypt trong trailer.
  • Biến thể tuân thủ. Truyền một PdfAVersion cho enablePdfA() để dùng 4e hoặc 4f. 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.
Tuyên bốTiêu chuẩnĐiều khoảnreference_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.