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 规范对应 —— 对应的无障碍子集