ISO 19005-4(PDF/A-4):NextPDF 功能對應
重點概覽
標題為「重點概覽」的區段ISO 19005-4:2020(PDF/A-4)是 PDF 2.0 的封存子集規範。本頁如實對應 NextPDF 的支援範圍:核心會輸出什麼、nextpdf/pro 擴充套件補上什麼,以及哪些範圍明確不由 NextPDF 涵蓋。NextPDF 會輸出與 PDF/A-4 相關的結構;但只有驗證器(validator)能判定某個檔案是否符合。
composer require nextpdf/core:^3# PDF/A-4 file authoring (OutputIntent + ICC + XMP) requires:# composer require nextpdf/pro概念總覽
標題為「概念總覽」的區段ISO 19005-4:2020 建構於 ISO 32000-2:2020(PDF 2.0)之上,不同於建構在 ISO 32000-1:2008(PDF 1.7)上的 PDF/A-2 和 PDF/A-3。NextPDF 將這個血統差異編碼於 ConformanceMode::requiresPdf17() 中。這個方法對每一種 PDF/A-4 情況都回傳 false,對 PDF/A-2 和 PDF/A-3 則回傳 true。
PDF/A-4 定義了三種符合性型態。基礎子集沒有 pdfa:conformance 字母。PDF/A-4e(附錄 B,工程/3D 內容)會設定 pdfa:conformance = E。PDF/A-4f(附錄 A,內嵌檔案)會設定 pdfa:conformance = F。ISO 19005-4:2020 §6.7.3 規定 AIIM 命名空間中的 PDF/A 識別綱要。它規定:既不符合 PDF/A-4e 也不符合 PDF/A-4f 的檔案不提供 pdfa:conformance 項目。NextPDF 在 ConformanceMode::pdfaConformanceLetter() 中精確反映這一點:PdfA4 回傳空字串、PdfA4e 回傳 E、PdfA4f 回傳 F。
關鍵的版本界線在於:PDF/A-4 檔案編寫——OutputIntent 字典、內嵌的 ICC 描述檔、XMP 擴充綱要、字型子集化保證,以及加密禁令——是由 Enterprise 版的 PdfAManager 實作。Enterprise 版的 PdfAManager 隨 nextpdf/pro 擴充套件提供。在僅安裝核心的環境中,Document::enablePdfA() 會擲出 InvalidConfigException,因為 security.pdfa 能力未註冊。可執行的範例(examples/32-pdfa4-icc.php)會先探查能力註冊表來示範這一點,並以清楚的訊息優雅降級,而不是丟出堆疊追蹤。
因此,在僅有核心時,PDF/A-4 的公開表面只到識別器層級:NextPDF 會記錄某份文件宣告了哪一種 PDF/A-4 變體。NextPDF 會輸出綱要所定義的 pdfaid:part = 4 與 pdfa:conformance 標記。產生一份完整的 PDF/A-4 檔案,與驗證它是否符合,是兩個彼此獨立的步驟。第一步需要 nextpdf/pro。第二步需要 veraPDF。
API 介面
標題為「API 介面」的區段| 介面 | 版本 | 它提供什麼 |
|---|---|---|
ConformanceMode::PdfA4 / PdfA4e / PdfA4f | 核心 | 變體識別器 |
ConformanceMode::pdfaPart() → 4 | 核心 | ISO 19005 部編號 |
ConformanceMode::pdfaConformanceLetter() → '' / 'E' / 'F' | 核心 | §6.7.3 符合性字母 |
ConformanceMode::requiresPdf17() → false | 核心 | PDF 2.0 血統閘門 |
Document::enablePdfA() | pro(專業版) | OutputIntent + ICC + XMP 編寫;在核心中會擲出 InvalidConfigException 例外 |
程式碼範例——快速上手
標題為「程式碼範例——快速上手」的區段<?php
declare(strict_types=1);
use NextPDF\Conformance\ConformanceMode;
// Core: introspect the declared PDF/A-4f contract.$mode = ConformanceMode::PdfA4f;$mode->pdfaPart(); // 4$mode->pdfaConformanceLetter(); // 'F' (ISO 19005-4:2020 §6.7.3 / Annex A)$mode->requiresPdf17(); // false (PDF/A-4 is PDF 2.0 lineage)程式碼範例——正式環境
標題為「程式碼範例——正式環境」的區段<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Exception\InvalidConfigException;use NextPDF\Support\CapabilityRegistry;
// PDF/A-4 file authoring requires the Premium extension. Probe first so a// Core-only install gets a clear rationale, not a stack trace.$registry = CapabilityRegistry::getInstance();if (!$registry->get('security.pdfa')->isAvailable()) { throw new InvalidConfigException( configKey: 'security.pdfa', givenValue: 'Core-only install', expectedType: 'nextpdf/pro extension (Enterprise PdfAManager)', );}
$doc = Document::createStandalone();$doc->enablePdfA(); // Emits OutputIntent + ICC + pdfaid XMP (Premium).// … write content …$doc->save(__DIR__ . '/out/archive-a4.pdf');
// The file now CARRIES PDF/A-4 structures. Conformance is still unproven// until veraPDF asserts it://// verapdf --flavour 4 out/archive-a4.pdf邊界情況與陷阱
標題為「邊界情況與陷阱」的區段- 核心無法編寫 PDF/A-4 檔案。
enablePdfA()在核心中會擲出例外。只有識別器與 XMP 標記屬於核心介面。 - 基礎 PDF/A-4 不輸出
pdfa:conformance。 依 ISO 19005-4:2020 §6.7.3,只有 PDF/A-4e 與 PDF/A-4f 才會設定該字母。ConformanceMode::PdfA4依設計回傳空字串。 - 屬 PDF 2.0 血統,不是 PDF 1.7。 常見錯誤之一,是沿用 PDF/A-3 流程並預期出現
%PDF-1.7。PDF/A-4 屬 PDF 2.0;requiresPdf17()對所有 PDF/A-4 情況都回傳false。 - ICC 驗證屬 Premium。 ISO 19005-4:2020 §6.2.2 的 OutputIntent ICC 驗證(
acsp魔術碼、標籤表、D50 白點)是 Enterprise 版PdfAManager的工作,不屬於核心。 - 函式庫不替檔案背書。 設定
PdfA4f並輸出標記,並不會讓產出成為有效的 PDF/A-4f 檔案。請執行 veraPDF。
核心的 PDF/A-4 表面是純值型別內省(enum 的 match 分派、O(1)、無配置)。Premium 的編寫路徑會在寫入時加入 OutputIntent 與 ICC 封包。它的成本來自內嵌描述檔的大小,並由寫入器預算在內部處理。veraPDF 驗證是頻外(out-of-band)步驟,並非產生流程的一部分。
安全性注意事項
標題為「安全性注意事項」的區段PDF/A-4 禁止加密。Enterprise 版的 PdfAManager 會強制執行禁止加密的不變式。Enterprise 版的 PdfAManager 會將這個不變式排入 enablePdfA() 的流程中,使呼叫端不會意外地把 AES-GCM 與封存模式組合在一起。核心在 HasSecurity::enablePdfA() 中的前置防護,會在寫入任何位元組之前拒絕這個不支援的組合。封存流程的細節請參閱本專案的威脅模型。
符合性
標題為「符合性」的區段這是一份功能對應,而非符合性聲明。
| ISO 19005-4:2020 範圍 | 條款 | NextPDF 涵蓋範圍 | 狀態 |
|---|---|---|---|
| 變體識別綱要 | §6.7.3 | ConformanceMode 會輸出 pdfaid:part = 4 與 pdfa:conformance 字母 | 已宣告(核心;於 tests/Unit/Conformance/ 中有單元測試) |
| PDF 2.0 血統閘門 | §6.7.3 / 基礎 | requiresPdf17() 回傳 false(適用所有 PDF/A-4 情況) | 已驗證(有單元測試) |
| OutputIntent + 內嵌 ICC | §6.2.2 | Enterprise 版 PdfAManager(nextpdf/pro) | 僅 Premium(非核心) |
| XMP 擴充綱要、字型子集化、加密禁令 | §6 / 附錄 A/B | Enterprise 版 PdfAManager(nextpdf/pro) | 僅 Premium,非核心 |
| 符合性判定 | 條款 5 | 不由 NextPDF 執行——請改用 veraPDF | 明確不涵蓋的範圍 |
「支援」不等於「符合」——本頁刻意把兩者分開。 (a)NextPDF Core 會輸出 ISO 19005-4:2020 §6.7.3 為變體識別所定義的結構——這是實作,由 tests/Unit/Conformance/ConformanceModePdfAVariantTest.php(測試通過)佐證。(b)某個檔案符合 PDF/A-4,則是另一個獨立的斷言;依 ISO 19005-4:2020 條款 5,只有驗證器才能做出。條款 5 規定:符合性的實際判定,是由檢查工具對照規範性要求來執行。NextPDF 主張(a)。NextPDF 並不主張(b)。請以 veraPDF 驗證(verapdf --flavour 4 …,或以 php oracle/run.php 跑 oracle 載具——它只在 veraPDF 二進位檔存在時才執行,是選擇性開啟的閘門)。
「PDF/A-4 compliant」、「fully conformant」與「PDF/A-4 certified」這些措辭,本頁刻意不用。NextPDF 會輸出與 PDF/A-4 相關的結構;它並不保證產出符合的檔案。
引用內容均改寫自 NextPDF 的法規遵循語料庫。完整的 64 字元 reference_id 摘要記錄在本頁的前置資料,以及 docs/public/modules/core/_normative-evidence-conf.md 中。
另請參閱
標題為「另請參閱」的區段- 符合性模組 ——
ConformanceMode路由與 veraPDF oracle - 法規遵循模組 —— PDF/R-1 驗證器與 Arlington 文法
- PDF/UA-2 規範對應 —— 對應的無障礙子集