比较 PDF 如何运作
三个步骤。两个文件都留在你的浏览器中。
选取两个 PDF
原始(A)和新版本(B)。两者都必须有文本层。
运行比较
文本用 PDF.js 提取,然后用 LCS 的行级比较识别出新增和删除的内容。
下载报告
一个新 PDF 列出新增的行(绿色)和删除的行(红色)并带有上下文。用于审阅或审计。
“比较 PDF”到底做什么
比较 PDF 回答一个非常常见的单一问题:版本 A 和版本 B 之间改了什么?使用场景几乎总是一份已经经过一轮或多轮修订的合同、 政策文件、研究论文或报告,而你想要一眼看清哪些段落被编辑、新增或删除—— 不是拿着放大镜并排盯着浏览器的两个标签页,而是让机器替你 完成那枯燥的部分。
该工具的 v0.1 运行的是文本级的比较。我们用 PDF.js 在你的浏览器中打开两个 PDF,
逐页提取文本内容,把各项内容归并成行,然后运行经典的 LCS(最长公共
子序列)算法,找出哪些行在 A 和 B 之间相匹配。
结果会渲染成一份简洁的 PDF 比较报告,新增的行用绿色高亮,
删除的行用红色,未改动的上下文用灰色。
这与 git diff 之类工具采用的方法相同,
只是应用于 PDF 的文本而非源代码。
这个版本适合做什么
- 合同审阅。找出各稿之间改动的每一个条款。
- 政策更新。向相关方准确展示哪些章节发生了变动。
- 编辑审阅。在两位审阅者之间比较一篇研究论文或一段文字。
- 文档审计。快速证明存档副本之间改了什么(以及没改什么)。
这个版本(暂时)做不到什么
- 视觉 / 像素比较。图像编辑、布局位移、签名印章——它们不产生任何文本改动,因此不会显示出来。视觉比较已列入 v0.2 路线图。
- 扫描的 PDF。纯图像的 PDF 没有文本层;请先对它们进行 OCR,再比较经过处理的副本。
- 表格单元格粒度。表格会被压平成文本行;若某个单元格改动,整行都会被标记为已修改。
- 词级高亮。改动按行标记,而非按词。检查一行 100 个字符中只有 5 个字符不同的情况,仍会标记整行。
隐私与安全
文档比较常用于机密材料: 谈判中的合同、内部政策、法律文书、 监管申报。大多数在线 PDF 比较服务会把两个文件 上传到服务器,在那里运行比较,再返回报告。 imisspdf 在你浏览器的标签页内完成全部比较,因此文档的任何 版本都绝不会离开你的设备。你可以在运行比较时 通过浏览器开发者工具中的“网络”面板来确认这一点。
常见问题
v0.1 是文本级的差异比较。我们逐页从两个 PDF 中提取文本层,按 Y 坐标位置把各项内容归并成行,然后运行行级的 LCS 差异算法。输出是一份全新的 PDF 报告,用绿色和红色高亮列出新增 / 删除 / 未改动的行。它对拥有真实文本层的 PDF 效果最佳(大多数来自 Word、Pages、LibreOffice、浏览器等的数字导出文件都是如此)。
视觉像素比对需要把每一页渲染到画布上并逐像素计算差异,这只能在浏览器中运行(Node 没有画布)。它已列入 v0.2 的路线图。文本差异覆盖了约 90% 真实世界中“这份合同改了什么?”这类问题;对于剩下的 10%(仅视觉的改动,如替换图片或添加签名),请在我们推出视觉差异比较后再使用。
在此版本中不能直接比较——扫描的 PDF 是一页页没有文本层的图像,因此没有可供比较的内容。请先用我们的 OCR 工具处理它们以添加可搜索的文本层,然后比较经过 OCR 的副本。准确度取决于扫描质量。
是的。两个 PDF 都会被读入你的浏览器,用开源的 PDF.js 库解析,在 JavaScript 中进行差异比较,报告则用 pdf-lib 生成——全部在本地完成。没有任何东西被上传;你可以在点击“比较”之前断开网络连接来确认这一点。
当前的差异比较每侧上限为 5000 行(远超一份 300 页的报告)。超过该数量后,LCS 算法会在标签页中开始占用大量内存。如果你超出了,请拆分文档并分段比较。