跳转到内容

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”这一概括性主张。 所谓符合规范的文件,是指符合规范的阅读器能够依照标准处理的文件。 这需要由验证工具判定,而不是由本库设置一个标志来断定。

Terminal window
composer require nextpdf/core:^3

PDF 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),用于凸显结构差异。 它们可以协助验证,但并不是合格证明。

符号效果
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 自己的话概括。