PDF 1.7 流和偏移兼容性

3.12.5 版加强了与 PDF 1.7 流字典、标准安全 crypt filters、对象语法解析、xref streams 和字节偏移输出的兼容性。通用流解码将 /DP 视为标准 /DecodeParms 别名,解析间接 decode-parameter 数组条目,接受 /AHx 和 /LZW 标准过滤器缩写,并在普通过滤器解码阶段把 Identity /Crypt 过滤器视为 no-op

加载 PDF 时,如果 Catalog /Version 条目比文件头版本更新,PDFlibPas 会将其视为有效文档版本。这与 PDF 1.7 catalog version override 规则一致

标准加密文档现在会在加载、解密、复制和保存流程中更一致地保留 StrF、StmF、EFF、Identity、None 和具名 StdCF 风格 crypt filter 决策。Metadata 流遵守 EncryptMetadata=false,嵌入文件流携带 /Type /EmbeddedFile,使嵌入文件 crypt filter 能与普通流分开应用;新写出的 AES crypt-filter Length 条目使用位长度

3.56.38 版确保普通 API 加密会在生成标准安全数据前创建或保留 trailer /ID。对缺少 /ID 的源 PDF 保存 AES-256 输出后,现在可通过 EncryptionStatus 重新加载为加密文档,并可用 Decrypt 显式解密

PDF 名称解析现在把左右花括号都视为分隔符。因此 /Name} 这类名称会在右花括号处分词,而不会把分隔符吸收到名称 token 中

Literal string 解析现在会忽略未知转义序列中的反斜杠,并把 \ddd 解析限制为八进制数字。因此 \128 会解码为 LF 后跟字符 8,而不是把 8 当成八进制转义的一部分

Xref stream type 2 压缩对象条目会保留其对象流编号,即使该编号大于 PDF 字节长度。文件大小合理性检查仍仅限于普通 xref 条目,在这些条目中第二个字段表示字节偏移

完整保存的 xref tables、startxref、线性化 xref tables、xref stream Prev/XRefStm 值以及数字签名 ByteRange 值使用 64 位格式化和解析辅助函数。这可防止大字节位置在写入 PDF 语法前经由 32 位整数路径被截断

当 xref stream 被改写为传统 trailer 字典时,只适用于 stream 的 DecodeParms 键会从输出 trailer 中移除。外部嵌入文件流在 FFilter 被提升为 Filter 时也会保留 FDecodeParms

3.12.5 验证覆盖 Delphi Win32 和 Win64 DUnitX 套件,两个平台均通过 141/141 个测试