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 這個判別器(PdfA4、PdfA4e、PdfA4f)。Premium 的 nextpdf/pro 引擎會在 save() 期間輸出 OutputIntent、內嵌的 ICC 設定檔,以及 XMP pdfaid 辨識結構描述。函式庫負責產生這些產物;一致性則由 veraPDF 判定。ISO 19005-4 §6.7.3 明確指出,pdfaid:part/pdfaid:rev 屬性「本身並不能決定一致性」。
composer require nextpdf/core:^3composer require nextpdf/pro # OutputIntent + ICC + XMP authoringCore 的 security.pdfa 能力已註冊,但在缺少 nextpdf/pro 時會回報為無法使用。此時 enablePdfA() 會擲出 InvalidConfigException 並提示升級路徑,不會輸出不符合規範的檔案。
概念總覽
標題為「概念總覽」的區段Document::enablePdfA(?object $version = null) 會將輸入的 PdfAVersion 列舉對映到對應的 ConformanceMode 案例。遇到無法辨識的輸入時,會預設為 ConformanceMode::PdfA4('4e' → PdfA4e、'4f' → PdfA4f)。這個模式會驅動標準對符合規範檔案要求的三項輸出義務:
- OutputIntent + ICC ——§6.2.3 允許符合規範的檔案,透過參照
DestOutputProfileICC 串流的 PDF/A-4 OutputIntent 指定其色彩特性。依 §6.2.4.1,這是達成裝置無關色彩的兩條允許途徑之一(另一條是直接指定裝置無關色彩空間)。因此,OutputIntent 是 NextPDF 採用的途徑,而不是標準的無條件要求。 pdfaid辨識 ——§6.7.3 要求在文件層級的 XMP 中提供 PDF/A 辨識結構描述(AIIMpdfaid命名空間),並帶有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 也將這項判定留給該流程。
API 介面
標題為「API 介面」的區段| 方法 | 作用 |
|---|---|
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 檔案中的內嵌檔案必須帶有
F與UF鍵(建議加上 Desc)。這是 ZUGFeRD/Factur-X 混合路徑的基礎。
OutputIntent + ICC 內嵌會在 save() 時加入固定大小的 ICC 串流(工作色彩空間設定檔)與 XMP 封包。對典型文件而言,預算為牆鐘時間 ≤ 1500 ms、尖峰記憶體 ≤ 128 MB。
安全性注意事項
標題為「安全性注意事項」的區段PDF/A-4 禁止加密。這個設定檔提供的是 archival/longevity(封存/長期保存)約束,而非安全性控制。金鑰保管與驗證方政策不在此設定檔範圍內;請見 信任中心。
資料落地與 PII 緩解措施
標題為「資料落地與 PII 緩解措施」的區段PDF/A-4 輸出會在處理程序內完成,只會寫出文件本身、內嵌的 ICC 設定檔,以及 XMP 封包。沒有任何內容會離開處理程序。原始內容中的 PII 由整合者負責處理——此設定檔不會進行遮蔽。
安全遙測與日誌清理
標題為「安全遙測與日誌清理」的區段此範例只會把輸出路徑與驗證器指令寫到 STDERR。不會記錄任何文件位元組。此範例會遵循 NEXTPDF_COOKBOOK_OUTPUT,且絕不會把 PDF 輸出到 STDOUT。
威脅模型
標題為「威脅模型」的區段PDF/A-4 檔案並未受存取控制保護。任何持有檔案的人都能讀取它;這個設定檔保證的是繪製結果的長期可用性,而非機密性。請把 OutputIntent ICC 串流視為公開內容。
FIPS 模式行為
標題為「FIPS 模式行為」的區段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 自己的話摘要。