跳到內容

PDF/A-4 一致性:NextPDF 為 ISO 19005-4 輸出哪些內容

界線聲明。 NextPDF 產生的輸出旨在符合 PDF/A-4;函式庫本身不宣稱一致性——一致性由驗證器(例如 veraPDF)決定。

PDF/A-4 即 ISO 19005-4:2020,是以 PDF 2.0 為基礎的封存設定檔。NextPDF Core 提供 ConformanceMode 這個判別器(PdfA4PdfA4ePdfA4f)。Premium 的 nextpdf/pro 引擎會在 save() 期間輸出 OutputIntent、內嵌的 ICC 設定檔,以及 XMP pdfaid 辨識結構描述。函式庫負責產生這些產物;一致性則由 veraPDF 判定。ISO 19005-4 §6.7.3 明確指出,pdfaid:part/pdfaid:rev 屬性「本身並不能決定一致性」。

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

Core 的 security.pdfa 能力已註冊,但在缺少 nextpdf/pro 時會回報為無法使用。此時 enablePdfA() 會擲出 InvalidConfigException 並提示升級路徑,不會輸出不符合規範的檔案。

Document::enablePdfA(?object $version = null) 會將輸入的 PdfAVersion 列舉對映到對應的 ConformanceMode 案例。遇到無法辨識的輸入時,會預設為 ConformanceMode::PdfA4'4e' → PdfA4e'4f' → PdfA4f)。這個模式會驅動標準對符合規範檔案要求的三項輸出義務:

  • OutputIntent + ICC ——§6.2.3 允許符合規範的檔案,透過參照 DestOutputProfile ICC 串流的 PDF/A-4 OutputIntent 指定其色彩特性。依 §6.2.4.1,這是達成裝置無關色彩的兩條允許途徑之一(另一條是直接指定裝置無關色彩空間)。因此,OutputIntent 是 NextPDF 採用的途徑,而不是標準的無條件要求。
  • pdfaid 辨識 ——§6.7.3 要求在文件層級的 XMP 中提供 PDF/A 辨識結構描述(AIIM pdfaid 命名空間),並帶有 pdfaid:part/pdfaid:rev。PDF/A-4e 與 PDF/A-4f 還會額外設定 pdfa:conformance(E / F)。§6.7.3 也指出,不符合 PDF/A-4e 或 PDF/A-4f 的檔案不得提供 pdfa:conformance 值。
  • 字型內嵌 ——§6.2.10 要求用於繪製的所有字型都必須內嵌。

NextPDF 負責輸出上述內容;它並不執行 §5 的一致性判定。那是 veraPDF 的工作,而 §6.7.3 也將這項判定留給該流程。

方法作用
enablePdfA(?object $version = null): static路由至 ConformanceMode::PdfA4/PdfA4e/PdfA4f,並在 save() 時排程 OutputIntent + ICC + XMP。如果缺少 nextpdf/pro,會擲出 InvalidConfigException|PageLayoutException|CompressionException
ConformanceMode::pdfaPart(): ?int回傳目前模式對應的 ISO 19005 部別(PdfA4* 為 4)。
ConformanceMode::pdfaConformanceLetter(): string回傳 pdfa:conformance 對應字母(E / F),或空字串。
<?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";

將驗證器的裁決包裝成建構流程的 gate(門檻)。針對輸出執行 verapdf --flavour 4,並在非零結束碼時讓建構失敗。驗證器的裁決才構成 gate——函式庫的輸出只是它的輸入,本身永遠不是裁決。完整的 gated 管線請見 PDF/A-4 一致性 gate 範例 /cookbook/php/pdfa4-conformance-gate/

  • 先啟用再加內容。 在加入內容前先呼叫 enablePdfA();事後才啟用並不會重新處理已寫入的物件。
  • 不加密。 PDF/A 禁止使用 Encrypt 鍵。不要對 PDF/A 文件呼叫 setEncryption()。加密屬於機密性,而非封存完整性,兩者在此互斥。
  • pdfa:conformance 是有條件的。 只有 PDF/A-4e 與 PDF/A-4f 會設定它。在純 PDF/A-4 檔案上輸出它,本身即構成一致性違規(§6.7.3)——ConformanceMode 案例從設計上就杜絕了這種情況。
  • PDF/A-4f 附件。 依 §6.7.5,PDF/A-4f 檔案中的內嵌檔案必須帶有 FUF 鍵(建議加上 Desc)。這是 ZUGFeRD/Factur-X 混合路徑的基礎。

OutputIntent + ICC 內嵌會在 save() 時加入固定大小的 ICC 串流(工作色彩空間設定檔)與 XMP 封包。對典型文件而言,預算為牆鐘時間 ≤ 1500 ms、尖峰記憶體 ≤ 128 MB。

PDF/A-4 禁止加密。這個設定檔提供的是 archival/longevity(封存/長期保存)約束,而非安全性控制。金鑰保管與驗證方政策不在此設定檔範圍內;請見 信任中心

PDF/A-4 輸出會在處理程序內完成,只會寫出文件本身、內嵌的 ICC 設定檔,以及 XMP 封包。沒有任何內容會離開處理程序。原始內容中的 PII 由整合者負責處理——此設定檔不會進行遮蔽。

此範例只會把輸出路徑與驗證器指令寫到 STDERR。不會記錄任何文件位元組。此範例會遵循 NEXTPDF_COOKBOOK_OUTPUT,且絕不會把 PDF 輸出到 STDOUT。

PDF/A-4 檔案並未受存取控制保護。任何持有檔案的人都能讀取它;這個設定檔保證的是繪製結果的長期可用性,而非機密性。請把 OutputIntent ICC 串流視為公開內容。

PDF/A-4 輸出不執行任何密碼學運算。在 PDF/A-4 檔案上加上數位簽章(PDF/A-4 §6.5 允許 PAdES 設定檔)是另一個獨立簽章範例的議題,並承襲該範例的 FIPS 狀態。本頁不做任何關於簽章的主張。

主張規範條號參考 ID
PDF/A-4 檔案 可以 透過參照 DestOutputProfile ICC 設定檔的 PDF/A OutputIntent 指定其色彩特性。ISO 19005-4§6.2.3
裝置無關色彩可以直接指定,也可以透過 OutputIntent 的 DestOutputProfile 間接指定(兩條允許途徑之一)。ISO 19005-4§6.2.4.1
PDF/A 版本透過文件 XMP 中的 PDF/A 辨識(pdfaid)結構描述標示。ISO 19005-4§6.7.3
pdfaid:part / pdfaid:rev 本身不能決定一致性;判定依 Clause 5 進行。ISO 19005-4§6.7.3
既不符合 PDF/A-4e 也不符合 PDF/A-4f 的檔案,不得提供 pdfa:conformance 值。ISO 19005-4§6.7.3
PDF/A-4f 的內嵌檔案必須帶有 F 與 UF 鍵(建議加上 Desc)。ISO 19005-4§6.7.5
用於繪製的所有字型都必須內嵌。ISO 19005-4§6.2.10
透明度/色彩的使用取決於已宣告的 OutputIntent。ISO 19005-4§6.2.9

引用以條號加 reference_id 指標指向驗證語料庫。不重製任何標準原文;條號皆以 NextPDF 自己的話摘要。