自动化验证覆盖

3.56.37 预检报告更新在既有 PDF/A 和 PDF/UA-1 文件检查基础上新增了文档化自动化路径。Delphi PreflightReport 示例现涵盖单文件报告、目录批处理、文本/JSON/HTML/CSV 输出、UTF-8 摘要 CSV 文件,以及通过 ComparePreflightReports 进行的纯文本基线比较。Tests.Preflight 验证报告节、机器可读 JSON、独立 HTML、CSV 行、UTF-8 保存输出、差异行和时间戳规范化

3.56.0 至 3.56.25 的 PDF/UA 审核系列扩展了围绕 PDF/UA-1 元数据、MarkInfo、RoleMap、加密辅助功能权限、XFA、引用 XObject、注释选项卡顺序及描述、FileSpec 名称、OCG 配置字典、字体嵌入与 TrueType 编码、标题顺序、列表编号、Note ID、媒体剪辑以及重复直接 H 子项的读取器和写入器诊断。低级读取器路径通过 CheckFileCompliance 公开;写入器端内存路径通过 GetPDFUADiagnostics 公开

3.56.x PAdES 验证工作增加了摘要选择、PAdES-B-B 已认证属性、signing-certificate-v2 IssuerSerial、签名时间戳增补、DSS/VRI 组装、承诺类型指示和签名策略属性的测试及参考覆盖。这些检查由签名测试以及 Security and Signatures 下专用 PAdES 参考页面覆盖

3.23.0 验证更新使 PDF 1.2 的 PDF 版本合规门严格化,并增加 PDF 1.7 Adobe 扩展级别检查。PDF 1.2 保存目标现会在写入输出前拒绝页面 TrimBox 数据等 PDF 1.3+ 功能。AESV3、AES-256、RichMedia、Projection、地理空间字典和 ETSI 签名子过滤器会针对必需的 /Extensions /ADBE /ExtensionLevel 声明进行检查。生成这些扩展级功能的写入器入口点现自动声明匹配的 ADBE 扩展级别,追加保存也运行与完整保存相同的预检。Tests.Document、Tests.Version 和 C++Builder Tests.VersionCompliance 固件覆盖严格 PDF 1.2 拒绝、AES-256 ExtensionLevel 输出、追加保存预检和扩展级 SSOT 规则

3.20.0 验证更新将写入器端 EnsureMinVersion 覆盖扩展到八个 PDFlib 入口点:SetDocumentMetadata(PDF 1.4 — /Metadata XMP 流)、SetPDFAMode(PDF 1.4 — /MarkInfo 和 /OutputIntents)、PageJavaScriptAction(PDF 1.5 — Page /AA)、DocJavaScriptAction(PDF 1.4 — Catalog /AA)、SetTabOrderMode(PDF 1.5 — Page /Tabs)、NewOptionalContentGroup(PDF 1.5 — /Type /OCG)、SetNeedAppearances(PDF 1.5 — AcroForm /NeedAppearances)以及签名字段的 NewFormField(PDF 1.5 — AcroForm /SigFlags AppendOnly 位)。结合 v3.15.0 和 v3.17.0 条目,PDFlib 现会在二十一个写入器入口点自动提升 FVersion。NewOptionalContentGroup 之前直接提升 FVersion,绕过 EnsureMinVersion 和 LockSaveVersion;现改走正确路径,因此会遵守锁定并在 AutoBumpedFeatures 中显示提升。Tests.Document 覆盖六个新的自动提升案例(SetDocumentMetadata 1.3 → 1.4、SetTabOrderMode 1.3 → 1.5、SetPDFAMode 1.3 → 1.4、NewOptionalContentGroup 1.3 → 1.5、SetNeedAppearances 1.3 → 1.5、NewFormField 签名 1.3 → 1.5)

3.19.0 验证更新实现了四项此前延后的 SSOT 规则。Btn 字段 /Ff 位 15 的 NoToggleToOff 标志(掩码 16384)将仅单选按钮行为限制为 PDF 1.4,并按 /FT = 'Btn' 区分。DeviceN /Subtype /NChannel 规则识别编码在 DeviceN 数组索引 4 属性字典中的 PDF 1.6 NChannel 色彩空间细化。FontFile3 /Subtype /OpenType 规则在流经名为 'FontFile3' 的父键访问时识别 PDF 1.6 OpenType 字体程序。Sig /SubFilter ETSI 规则对 /SubFilter ETSI.CAdES.detached 或 /SubFilter ETSI.RFC3161(均为 PDF 1.7)的签名字典触发。这是首组依赖 Ctx.KeyName 上下文感知的 SSOT 回调。Tests.Version 断言四项规则均以正确的 MinVersion 存在。规则数从 99 增至 103

3.18.6 验证更新增加了上下文敏感的 /AA(附加动作)规则。/AA 出现在四种最低版本不同的 PDF 字典容器中:Catalog /AA(文档级触发器,PDF 1.4)、Annot /AA(注释触发器,PDF 1.4)、Page /AA(页面触发器,PDF 1.5)和 Form field /AA(PDF 1.2,在严格 PDF 1.2 目标下有效)。三个新的 fmkCustom 回调按 /Type 区分,因此 /AA 只触发其所在容器匹配的规则。Widget 注释 /AA(既是表单字段又是 /Subtype /Widget 注释)有意在 PDF 1.4 触发 Annot /AA 分支;这是可接受的近似,因为 PDF 1.4 以上的每个保存契约已接受表单字段 /AA。Tests.Version 断言全部三个上下文 /AA 规则存在。规则数从 96 增至 99

3.18.5 验证更新修复了 /Tabs 规则误分类并新增 /NeedAppearances 规则。/Tabs(页面选项卡顺序)此前在 PDFFeatureRules 中列于 PDF 1.4,但 Adobe PDF 1.4 变更规范(Technical Note #5409)未引入 /Tabs;该条目首次出现于 PDF 1.5 表 8.10(Page Object)。该规则现位于 PDF 1.5 节。新规则覆盖 AcroForm /NeedAppearances(PDF 1.5 表 218),此前该表中没有表示。Tests.Version 断言 /Tabs 没有 PDF 1.4 条目,且存在 /NeedAppearances PDF 1.5 规则。规则数从 95 增至 96

3.18.1 验证更新以七个表单字段 /Ff 标志回调和 AcroForm /SigFlags AppendOnly 位扩展位级规则集。Tx FileSelect(1048576)、Ch MultiSelect(2097152)、Tx/Ch DoNotSpellCheck(4194304)和 Tx DoNotScroll(8388608)限制为 PDF 1.4;Tx Comb(16777216)、Tx RichText / Btn RadiosInUnison(33554432)、Ch CommitOnSelChange(67108864)和 AcroForm SigFlags AppendOnly(掩码 2)限制为 PDF 1.5。不遵循 /Parent 继承,只有显式携带 /Ff 或 /SigFlags 的字典会触发规则。Tests.Document 覆盖一个 Tx /Ff 16777220 固件(Comb + NoExport),使加载器从 1.4 提升到 1.5,并在 ContributorFeatures 中列出 Comb

3.18.0 验证更新开始向 PDFFeatureRules 添加子键和位级规则。三个位级注释标志规则覆盖 Locked(128,PDF 1.4)、ToggleNoView(256,PDF 1.5)和 LockedContents(512,PDF 1.7)的 /F 掩码值;仅当字典为 /Type /Annot 时触发。六项新的 fmkDictKey 规则覆盖特有目录和页面子键:/BoxColorInfo(PDF 1.4)、/Permissions、/Legal 和 /PresSteps(PDF 1.5)、/VP(PDF 1.6)以及 /Collection(PDF 1.7)。Tests.Document 覆盖 Annot /F 516 固件(Print + LockedContents),使加载器从 1.4 提升到 1.7,并在 ContributorFeatures 中列出 LockedContents。Tests.Version 断言新规则位于表中

3.17.0 验证更新将写入器端 EnsureMinVersion 覆盖扩展到八个 PDFlib 入口点:AddLinkToJavaScript、SetOpenActionJavaScript、AddGlobalJavaScript 和 FormFieldJavaScriptAction(均为 PDF 1.3);AddEmbeddedFile 和 AddFileAttachment(PDF 1.3);SetXFAFromString(PDF 1.5);AddSWFAnnotationFromFile(PDF 1.7)。结合原始 v3.15.0 条目(SetTransparency、SetPageUserUnit、Encrypt、SetPageLayout),PDFlib 现会在十三个高版本写入器入口点自动提升 FVersion。Tests.Document 覆盖 JavaScript 三元组(AddGlobalJavaScript、SetOpenActionJavaScript、AddLinkToJavaScript),将新文档从 PDF 1.2 自动提升到 PDF 1.3

3.16.3 验证更新增加可选版本锁。新的 PDFlib API LockSaveVersion(Version) 将 FVersion 固定在 Version,并阻止第 3 阶段写入器端 EnsureMinVersion 提升它;UnlockSaveVersion 清除该锁。保存时门保持不变,因此锁定文档若通过写入器调用获得高版本功能,保存仍会因 LastErrorCode 602 失败。Tests.Document 覆盖:(a) 在 1.3 锁定 + SetTransparency:FVersion 保持 1.3,AutoBumpedFeatures 为空,SaveToFile 因 LastErrorCode 602 失败;(b) 在 1.6 锁定 + SetTransparency / SetPageUserUnit:两个调用均成功且不再提升 FVersion;(c) 锁定 + SetTransparency(拒绝)+ Unlock + SetTransparency(允许):FVersion 提升至 1.4,AutoBumpedFeatures 记录 "transparency"

3.16.2 验证更新增加加载时功能检测的仅贡献者视图。CollectMatchesForObject 和 DetectFeaturesInObjectTree 现接收 BaselineVersion 参数,使调用方可将匹配功能分为“所有匹配”(DetectedFeatures、GetInformation 101)和“MinVersion 严格高于基线的匹配”(ContributorFeatures、GetInformation 103)。TPDFDocument.DetectVersionFromContent 将文件 HeaderVersion 作为基线,因此 ContributorFeatures 可回答“为何有效版本高于字面文件头?”。Tests.Document 覆盖一个在 DetectedFeatures 中列出 /CA 但产生空 ContributorFeatures 的固件(没有规则高于 1.4 头),以及一个组合固件,其中仅 /UserUnit(1.6)显示在 ContributorFeatures,而 /TrimBox(1.3)和 /StructTreeRoot(1.4)被过滤

3.16.1 验证更新通过六个附加合成固件和测试扩展加载器端检测覆盖:页面内透明度 ExtGState(PDF 1.4 功能,因文件头已为 1.4 不提升)、将 PDF 1.3 提升至 1.4 的 Catalog /MarkInfo 条目、将 PDF 1.4 提升至 1.5 的 /OCProperties + OCG 内容集、将 PDF 1.5 提升至 1.6 的 /Type /3DStream 对象、确认 FVersion 反映最高必需最低版本且 DetectedFeatures 列出所有贡献条目的多功能组合固件,以及确认加载后写入器自动提升进入 AutoBumpedFeatures 而 DetectedFeatures 保持加载时快照的快照稳定性检查

3.16.0 验证更新通过加载器端检测完成 PDF 版本合规计划。在 LoadFromString / LoadFromFile / LoadFromStream 之后,TPDFDocument.DetectVersionFromContent 通过 SSOT 遍历每个间接对象,当内容需要更高版本时将 FVersion 提升到字面 %PDF-X.Y 头值之上。三个新的 GetInformation 键(100 = HeaderVersion、101 = DetectedFeatures、102 = AutoBumpedFeatures)公开加载器和写入器诊断。Tests.Document 覆盖合成 PageUserUnitFixture(头为 1.4,页面 /UserUnit 2.0),加载器将其提升到 1.6 同时保持 HeaderVersion 1.4,还覆盖确认任何加载发生前诊断 GetInformation 键为空的新文档案例

3.15.0 验证更新将 PDFlib 写入器入口点(SetTransparency、SetPageUserUnit、采用 AES 强度的 Encrypt、SetPageLayout 双页模式)接入 TPDFDocument.EnsureMinVersion,因此现在在低 SetInformation 保存目标调用高版本功能会自动提升文档版本,而不是在保存时产生 LastErrorCode 602。Tests.Document 覆盖新路径“设置 1.3、SetTransparency、FVersion 变为 1.4 且保存写入 %PDF-1.4”、SetPageUserUnit 和 Encrypt(AES-256) 的等效路径,以及调用者已选择满足写入器最低要求版本的无操作情况

3.14.3 验证更新通过添加剩余 PDF 1.6 3D 字典类型(/Type /3DStream /3DRef /3DBackground /3DRenderMode /3DLightingScheme /3DCrossSection /3DNode)以及 PDF 1.7 Redact、RichMedia 和 Projection 注释子类型及 /Type /Requirement 和 /ReqHandler 配套字典,完成版本合规工作的第 2 阶段。通过此 PATCH,SSOT 现以单一功能到最低版本表覆盖 PDF 1.3 至 1.7 章节级功能

3.56.x 的 PAdES 验证工作为摘要选择、PAdES-B-B authenticated attributes、signing-certificate-v2 IssuerSerial、签名时间戳增强、DSS/VRI 组装、commitment-type indication 和 signature-policy attributes 增加了测试与参考文档覆盖。这些检查由签名测试以及 Security and Signatures 下的专用 PAdES 参考页覆盖

3.23.0 验证更新使 PDF 版本合规闸口对 PDF 1.2 更严格,并增加 PDF 1.7 Adobe extension-level 检查。PDF 1.2 保存目标现在会在写出前拒绝 TrimBox 等 PDF 1.3+ 特性。AESV3、AES-256、RichMedia、Projection、地理空间字典和 ETSI 签名子过滤器会按所需 /Extensions /ADBE /ExtensionLevel 声明进行检查。发出这些 extension-level 特性的写入入口点会自动声明匹配的 ADBE extension level,追加保存也会运行与完整保存相同的预检

3.20.0、3.19.0、3.18.x、3.17.0 和 3.16.x 系列把版本检测和自动升版覆盖扩展到更多 writer 入口点、子键规则、位级规则、上下文相关 /AA 规则、加载端特性检测、贡献特性诊断以及显式版本锁。相关测试覆盖 SetDocumentMetadata、SetPDFAMode、JavaScript 动作、可选内容、表单字段标志、OpenType、ETSI 签名子过滤器、LockSaveVersion、DetectedFeatures、ContributorFeatures 与 AutoBumpedFeatures 等路径

3.15.0 到 3.14.0 的验证工作建立了 PDF 1.3 到 PDF 1.7 的 feature-to-minimum-version 表,并把 writer 入口点接入 EnsureMinVersion。规则覆盖透明度、UserUnit、AES 加密、页面布局模式、平滑着色、ICCBased 与 DeviceN 颜色空间、ToUnicode CMaps、文件附件、标记 PDF、输出意图、多媒体与 3D 字典、RichMedia、Projection 和 Redact 等章节级特性。3.13.0 将规则集移入 Lib\PDFlibVersion.pas,并由 Tests.Version 验证规则表和版本字符串辅助函数

3.12.0 验证矩阵包含 build-zlib-bcc32、build-zlib-bcc64x、build-zlib-vc64、build-jpeg-bcc32 和 build-jpeg-vc64,均以零失败对象完成。库包构建也通过 build-Win32-Lib.cmd 37.0 和 build-Win64-Lib.cmd 37.0 验证

当前 Delphi DUnitX 套件在 Win32 和 Win64 上均通过 362/362 个测试。覆盖范围包括压缩往返、已知 zlib 流解码、边界大小负载、stored multi-block 流、HelloWorld /FlateDecode 输出、JPEG 和 PNG 渲染、图像导入导出、字体、表单、加密、解密、签名、PAdES 属性、打印、Unicode 辅助函数、缓冲区、canvas 绘图、页面、表格、文档流程、语法/xref 解析、严格 PDF 1.2 保存契约、追加保存版本预检、PDF 1.7 extension-level 合规、PDF/UA 诊断以及预检报告生成/比较

当前 C++Builder Win64x GoogleTest 套件通过 61 个测试并跳过 2 个既有的样本依赖测试。它覆盖 demo 派生工作流,以及 zlib-ng 已知流、边界大小负载、类似 PNG 的扫描线负载、stored multi-block 往返、图像处理、包含 Direct Access PdfToImage 覆盖的渲染输出、加密、签名、打印、严格 PDF 1.2 保存契约、PDF 1.7 extension-level 输出、追加保存版本预检和 HelloWorld 压缩输出检查,从而验证 C++Builder ABI 下的 bcc64x zlib-ng 对象集

HTML 参考由 tools/test_docs_api_coverage.py 保护,该脚本检查每个公开 TPDFlib 函数是否拥有英文参考页;同时由 tools/test_docs_navigation.py 保护,该脚本保持框架式帮助界面中的多语言更新日志导航目标一致

当用户可见的验证、预检、渲染、签名或报告行为发生变化时,应保持 Readme.html 与 HTML 参考文档一致