文档比较

THPDFDocComparison 比较两个已加载的 THotPDF 文档并返回确定性的 JSON 报告

结构化比较

cmStructural 从每个文档目录开始,跟随间接引用,并根据排序后的字典键和数组索引分配路径,例如 $Catalog/Pages/Kids[0]/Contents

标量值和解码后的流字节使用 SHA-256 哈希,因此大流可以增量比较,而无需物化另一份完整副本

路径相同但签名不同的对象报告为 objectChanged;不同路径上签名相同的对象是 objectMoved;其余未匹配的对象是 objectInserted 或 objectDeleted

页面对齐

可提取文本的页面使用语义文本签名进行对齐,当文本为空或不可用时回退到结构化签名

最长递增子序列遍历在插入和删除之间保持页面顺序,同时将真正的重排报告为 pageMoved

未匹配的对齐页面成为 pageChanged、pageInserted 或 pageDeleted;页面元数据独立于 /Parent、/Contents 和 /Resources 签名,以避免字体子集编码噪声

渲染比较

cmRenderedImage 和 cmFull 以配置的 DPI 渲染公共页面,并一次性扫描每个位图以计算变化像素、变化像素比率、平均绝对颜色误差、最大颜色增量和全局 SSIM 类亮度分数

THPDFRenderedCompareOptions 选择 RGB 或亮度差异、逐像素颜色容差、最小相似度、最大变化像素比率、平铺尺寸、变化区域保留、像素预算和可选的 PNG 叠加

仅当变化像素比率和相似度门都通过时页面才相似;度量以全精度求值,仅为了确定性 JSON 报告而四舍五入到六位小数

变化的平铺会合并为确定性的四连通区域,并以像素空间边界、变化像素计数和最大颜色增量报告

启用热图时,变化像素从黄色混合到红色覆盖在文档 A 上,并以 page-000001-diff.png 样式的文件保存在调用方选择的目录中

边界与完整性

THPDFStructuralCompareLimits 控制对象、边、页面、深度、差异、流字节、值字节和路径字节限制

如果遍历达到限制,报告会包含 comparisonBudget,将 comparisonComplete 设为 false,并且不能将文档报告为相同

渲染工作在分配前估算,并按页面和按比较设置边界;渲染、分配或叠加失败会添加 renderBudget 或 renderError,将 renderComparisonComplete 和 comparisonComplete 设为 false,并失败关闭

比较模式

结果格式

报告包含源计数、遍历遥测、规范化后的结构和渲染限制、differenceCount、reportedDifferenceCount、differencesTruncated、comparisonComplete、identical 以及 differences 数组

渲染模式还返回 renderedPages 数组,包含页面状态、尺寸、度量、变化区域和可选的叠加路径,以及聚合的渲染页面和像素计数

每个差异可以包含稳定的 pathA 和 pathB 值、页面索引、对象编号、类型和详情字符串

相关 API

THPDFDocComparison · CompareWithOptions · THPDFRenderedCompareOptions · THPDFComparisonMode · HPDFDocCompareDocuments