PDF 2.0 基准:NextPDF 在 ISO 32000-2 中实现的条款
边界声明。 NextPDF 实现所引用的条款;完整的 ISO 32000-2 符合性并未作为概括性主张提出。
ISO 32000-2:2020 是 PDF 2.0 的基础标准。 NextPDF Core 的默认输出(ConformanceMode::Plain)是不受约束的 PDF 2.0:包含一个 %PDF-2.0 标头、一份文档目录、一套交叉引用结构,以及一个符合规范的尾部。 本页说明 NextPDF 所实现的基准条款,并明确界定其限制范围。 本库只主张其实现所引用的条款,并未提出“完整符合 ISO 32000-2”这一概括性主张。 所谓符合规范的文件,是指符合规范的阅读器能够依照标准处理的文件。 这需要由验证工具判定,而不是由本库设置一个标志来断定。
composer require nextpdf/core:^3PDF 2.0 基准输出是 Core 的默认值,不需要启用任何配置文件。 ConformanceMode::Plain 是默认的判别值;PDF/A-4、PDF/UA-2、PDF/X 与 ZUGFeRD 等配置文件,都是叠加在这层基准之上的受限子集。
概念总览
标题为“概念总览”的章节在应用任何配置文件之前,每一份 NextPDF 文档本身都是一个 PDF 2.0 文件。 写入器满足 ISO 32000-2 对符合规范文件提出的结构性要求:
- 文档目录 — §7.7.2:尾部
/Root引用的根对象;每一份输出都会包含它。 - 交叉引用结构 — §7.5.8:用来定位每一个对象的交叉引用表或交叉引用流。
- 尾部 — §7.5.5:符合规范的文件必须具备的尾部字典,其中包含文件的
/ID标识符。 这个/ID对每个文件都是唯一的;比对时会先通过规范化将其移除。 这也解释了为什么大多数多对象输出属于reproducibility_profile: structural,而不是逐字节相同。 - 逻辑结构 — §14.7.2:启用标记模式时,它就是 PDF/UA-2 配置文件所依据的
StructTreeRoot基准。 - 版本扩展 — §7.12:在声明开发者扩展之处,使用 Extensions 字典/开发者前缀机制。
NextPDF 实现了这些条款,但并未执行完整的 ISO 32000-2 符合性评估。 这属于外部验证工具的职责(例如 Arlington 语法检查器或 veraPDF)。 NextPDF\Compliance 随附字节流交叉检查(ArlingtonValidator),用于凸显结构差异。 它们可以协助验证,但并不是合格证明。
API 接口
标题为“API 接口”的章节| 符号 | 效果 |
|---|---|
ConformanceMode::Plain | 默认值 — 输出不受约束的 PDF 2.0。 |
ConformanceMode::requiresPdf17(): bool | 在 PDF 2.0 模式下返回 False;写入器会输出 %PDF-2.0 标头。 |
NextPDF\Compliance\Validator\ArlingtonValidator | 对照 Arlington PDF 模型进行语法交叉检查(协助验证)。 |
代码示例 — 快速上手
标题为“代码示例 — 快速上手”的章节<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/baseline.pdf';
$doc = Document::createStandalone(); // ConformanceMode::Plain — PDF 2.0$doc->setTitle('PDF 2.0 baseline');$doc->writeHtml('<h1>Hello PDF 2.0</h1><p>Unconstrained baseline output.</p>');$doc->save($out);
echo "Wrote {$out} (%PDF-2.0). Validate structure with an external checker.\n";代码示例 — 生产环境
标题为“代码示例 — 生产环境”的章节生产环境中的基准输出做法,是在 CI 中针对代表性输出运行外部结构验证工具(Arlington/veraPDF),并以其报告作为把关依据。 本库负责输出结构;是否符合规范,则由检查工具裁定。 本库并未提出任何概括性的符合性主张。
边界情况与注意事项
标题为“边界情况与注意事项”的章节/ID对每个文件都是唯一的。 如果基准输出包含尾部/ID、/CreationDate或字体子集前缀,它就不是逐字节稳定的。 请使用结构性配置文件(qpdf-normalize)进行比对,而不是直接比对原始 sha256。- Plain ≠ 归档级别。
ConformanceMode::Plain并不是 PDF/A。 它不包含任何 OutputIntent 或pdfaid标记。 请勿将其视为归档级别的文件。 - 实现 ≠ 完整符合。 本页列出的是 NextPDF 实现的条款。 这并不等于声明每一份文档都满足每一条 ISO 32000-2 条款——这需要由针对单份文档的验证工具裁定。
- 扩展采用命名空间。 开发者扩展会搭配已注册的前缀,并使用 §7.12 的 Extensions 字典。 未加前缀的私有键属于基准偏差。
基准输出位于引擎的核心路径。 对于典型文档,预算为挂钟时间 ≤ 1500 ms、峰值内存 ≤ 64 MB。 基准写入器支持向后移植矩阵(PHP 8.1–8.4)。
安全性说明
标题为“安全性说明”的章节PDF 2.0 基准输出默认不包含任何加密或签名,除非明确添加。 加密提供的是机密性(属于另一则示例)。 ISO 权限位依赖阅读器配合,并不是访问控制。 基准输出不提供任何安全性保证。
符合性
标题为“符合性”的章节| 主张 | 规范 | 条款 | 参考 ID |
|---|---|---|---|
| 符合规范的 PDF 2.0 文件必须具备符合规范的尾部/文件结构。 | ISO 32000-2 | §7.5.5 | |
| 每一个对象都可通过交叉引用表或交叉引用流定位。 | ISO 32000-2 | §7.5.8 | |
| 文件以文档目录作为其根对象。 | ISO 32000-2 | §7.7.2 | |
| 符合性是以符合规范的写入器与阅读器来界定的。 | ISO 32000-2 | §7.2 | |
| 版本扩展使用 Extensions 字典/开发者前缀。 | ISO 32000-2 | §7.12 | |
| 标记输出建立在 ISO 32000-2 的逻辑结构基准之上。 | ISO 32000-2 | §14.7.2 |
引用以条款 ID 加上 reference_id 指针指向验证语料库。 本页不复制任何标准正文;所有条款都以 NextPDF 自己的话概括。