跳转到内容

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 一文之中。