跳到內容

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)能判定某個檔案是否符合。

Terminal window
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 回傳 EPdfA4f 回傳 F

關鍵的版本界線在於:PDF/A-4 檔案編寫——OutputIntent 字典、內嵌的 ICC 描述檔、XMP 擴充綱要、字型子集化保證,以及加密禁令——是由 Enterprise 版的 PdfAManager 實作。Enterprise 版的 PdfAManagernextpdf/pro 擴充套件提供。在僅安裝核心的環境中,Document::enablePdfA() 會擲出 InvalidConfigException,因為 security.pdfa 能力未註冊。可執行的範例(examples/32-pdfa4-icc.php)會先探查能力註冊表來示範這一點,並以清楚的訊息優雅降級,而不是丟出堆疊追蹤。

因此,在僅有核心時,PDF/A-4 的公開表面只到識別器層級:NextPDF 會記錄某份文件宣告了哪一種 PDF/A-4 變體。NextPDF 會輸出綱要所定義的 pdfaid:part = 4pdfa:conformance 標記。產生一份完整的 PDF/A-4 檔案,與驗證它是否符合,是兩個彼此獨立的步驟。第一步需要 nextpdf/pro。第二步需要 veraPDF。

介面版本它提供什麼
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.3ConformanceMode 會輸出 pdfaid:part = 4pdfa:conformance 字母已宣告(核心;於 tests/Unit/Conformance/ 中有單元測試)
PDF 2.0 血統閘門§6.7.3 / 基礎requiresPdf17() 回傳 false(適用所有 PDF/A-4 情況)已驗證(有單元測試)
OutputIntent + 內嵌 ICC§6.2.2Enterprise 版 PdfAManagernextpdf/pro僅 Premium(非核心)
XMP 擴充綱要、字型子集化、加密禁令§6 / 附錄 A/BEnterprise 版 PdfAManagernextpdf/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 中。