内容流语义比较
HPDFContentStream 可以将解码的 PDF 内容规范化为有界规范事件,并比较这些事件,而不会将无害的序列化选择视为更改
声明
function HPDFNormalizeContentStreamGraphicsState(
const Bytes: TBytes; out Canonical: TBytes;
out Statistics: THPDFContentSemanticStatistics;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
function HPDFCompareContentStreamsSemantic(
const Left, Right: TBytes;
out Info: THPDFContentSemanticCompareInfo;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
规范化
- 数字按调用方容差量化,并以与区域设置无关的拼写发出
- 字面量和十六进制字符串按解码字节值比较,而数组保留项类型和顺序
- 图形和文本状态设置器更新有效快照,冗余设置器不创建事件
q和Q维护完整状态栈,但本身不成为事件- 连续的
cm操作符按 PDF 顺序相乘,因此等效矩阵分解比较相等 - 每个保留的操作符携带在该点应用的有效矩阵、线、颜色、外部图形和文本状态
- 内联图像键由标记化器规范化,负载使用 SHA-256 身份以避免规范流扩展
诊断与边界
THPDFContentSemanticStatistics 报告令牌、操作、状态操作、冗余状态、规范化事件、最大栈深度、规范字节、错误偏移、有效性和限制信息。比较还报告第一个不同的规范化事件
格式错误的嵌套字典操作数、无效的状态操作符元数、未匹配或未关闭的图形状态范围、尾随操作数、操作溢出和规范字节溢出会失败关闭,并且永远不会报告等效
传入解码后的内容字节。流过滤器解码和跨不同资源字典的资源名称协调仍是调用方的责任