比较大量 PDF 文件的工具? [关闭]

Posted

技术标签:

【中文标题】比较大量 PDF 文件的工具? [关闭]【英文标题】:Tool to compare large numbers of PDF files? [closed] 【发布时间】:2010-09-13 19:47:39 【问题描述】:

我需要比较大量 PDF 文件的光学内容。由于 PDF 文件是在不同平台上创建的,并且使用不同版本的软件,因此存在结构差异。例如:

文本的分块可以不同 写入顺序可以不同 位置可能会有所不同

它应该像人一样比较内容,而不是内部结构。我想测试我们使用的不同版本的 PDF 生成器之间的回归。

【问题讨论】:

部分答案是使用pdftotext 并比较包含的文本。 但这会忽略所有非文本信息,如线条、框、图片、图表等。我认为它也不会显示文本的光学位置,而是结构位置。 我同意,这不是一个充分的标准。另一方面,它是一个必要的标准,因此它作为一个单元测试是足够的。 以前从未遇到过您的情况,但我尝试ExamDiff Pro 比较 PDF,它对我有用。 以后可以随时添加更好的单元测试! 【参考方案1】:

因为没有我们编写的工具可用。您可以下载i-net PDF content comparer 并使用它。我希望能帮助其他有同样问题的人。如果您对此有疑问或有反馈意见,请联系我们的支持。

【讨论】:

这个工具的优点是,它既不是纯文本比较器,也不是图像比较器。它按结构进行比较,检查包含的元素是否“相同”——因此您比较的 PDF 不必匹配 100%,而是在可定义的相似性范围内。而且是免费的。 我也推荐这个!它在一个文件上崩溃了,所以我把它寄给了他们。他们修好了! :D 我感觉很好。它可以生成有差异的图像,也可以在控制台中为您提供文本报告。 @gamma 该应用程序在哪里免费?每年至少要花费 200 美元(!)。 30天内只有一次免费。这对我来说太贵了。 @LonelyPixel 是的,你是对的。 1.0 版是免费的(截至 2010 年 10 月 14 日)。我们对其进行了相当多的更改,现在它是一个付费工具(2012-10)。但是,您可以尝试 30 天,没有任何限制。它确实获得了许多新功能、稳定性和可靠性。我希望你仍然看看它;) 我也需要比较 pdf 文件——我想出了一个使用 apache pdfbox 的 jar。以testautomationguru.com/… 为例并下载。【参考方案2】:

其实有一个diffpdf工具。

http://www.qtrac.eu/diffpdf.html

它的弱点是当添加使新文本部分转移到新页面时它反应不佳。例如,如果要将旧的第 4 页与第 5 页的末尾和第 6 页的开头进行比较,则需要转换参数以分别比较两个切片。

【讨论】:

原始开源版本仍在qtrac.eu/diffpdf-foss.html提供【参考方案3】:

我使用了一个自制的脚本

将两个 PDF 中的所有页面转换为位图 将 PDF 1 的页面着色为红底白字 在 PDF 2 页面上将白色更改为透明 将 PDF 2 中的每一页叠加在 PDF 1 中相应页面的顶部 在多个内核上并行运行转换/着色和叠加

使用的软件:

用于 PDF 到位图转换的 GhostScript ImageMagick 用于着色、透明度和叠加 通知同步并行进程 任何支持 PNG 的图像查看器,用于查看结果

优点:

简单的实现 使用的所有工具都是开源的 非常适合发现布局中的细微差异

缺点:

转换很慢 PDF 之间的主要差异(例如分页)导致混乱 位图不可缩放 仅适用于黑白文本和图表 没有易于使用的 GUI

我一直在寻找可以在 PDF/PostScript 级别执行相同操作的工具。

以下是我们的脚本调用实用程序的方式(注意 ImageMagick 在后台使用 GhostScript 进行 PDF->PNG 转换):

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png
$ composite front01.png back01.png result01.png # do this for all pairs of images

【讨论】:

为什么不分享完整的脚本? 这是我用来合成的:for i in $(seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1-$i.png 2-$i.png result-$i.png; done 这是一个不将临时文件写入磁盘并使用 Poppler 的 pdftoppm 的脚本,它比 Ghostscript 更快:gist.github.com/brechtm/891de9f72516c1b2cbc1。它为pdfdiff 目录中的 PDF 的每一页输出一个 JPG,并另外打印两个 PDF 之间不同的页数。【参考方案4】:

这里好像看不到,所以这里是:via superuser: How to compare the differences between two PDF files? (answer #229891, by @slestak),有

https://github.com/vslavik/diff-pdf

(Ubuntu Natty 的构建步骤可以在get-diff-pdf.sh 中找到)

据我所见,它基本上覆盖了pdf中每个页面的文本/图形,让您轻松查看是否有任何变化......

干杯!

【讨论】:

【参考方案5】:

我们还使用pdftotext(请参阅 Sklivvz 的回答)生成 PDF 的 ASCII 版本,并使用wdiff 来比较它们。

使用 pdftotext 的 -layout 开关来增强可读性并了解布局的变化。

要从 wdiff 获得漂亮的彩色输出,请使用以下包装脚本:

#!/bin/sh
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2

【讨论】:

【参考方案6】:

我认为您最好的方法是将 PDF 转换为分辨率合适的图像,而不是进行图像比较。

要从 PDF 生成图像,您可以使用 Adob​​e PDF Library 或 Best way to convert pdf files to tiff files 建议的解决方案。

为了比较生成的 TIFF 文件,我发现 GNU tiffcmp(对于 GnuWin32 tiff 的 windows 部分)和 tiffinfo 做得很好。使用 tiffcmp -l 并计算输出的行数以找出任何差异。如果您乐于进行少量内容更改(例如抗锯齿差异),则使用 tiffinfo 计算像素总数,然后您可以生成百分比差异值。

顺便说一句,对于任何在结构没有改变的情况下进行简单 PDF 比较的人,都可以使用命令行 diff 并忽略某些模式,例如使用 GNU diff 2.7:

diff --brief -I xap: -I xapMM: -I /CreationDate -I /BaseFont -I /ID --binary --text

这仍然有一个问题,它并不总是捕捉到生成的字体名称的变化。

【讨论】:

我认为比较 2 个图像比比较 PDF 文件本身更复杂。 可以使用 GnuWin32 tiffcmp 比较图像。我将更新我的答案以详细说明这一点。【参考方案7】:

我们的产品,PDF Comparator - http://www.premediasystems.com/pdfc.html" - 将非常优雅和高效地做到这一点。它也不是免费的,并且是仅适用于 Mac OS X 的应用程序。

【讨论】:

此工具逐像素比较。这很简单。问题是像人类一样进行比较。 @Horcrux7:但是除了逐像素比较之外,人眼还能如何比较外观相似的不同页面?!? @KurtPfeifle - 我意识到这是一个老评论......但人类确实在逐个像素的基础上比较图像;人类比较图像差异的方式非常复杂,但很大程度上依赖于模式识别和启发式算法。 @CBRF23: 是的,我知道这一点——但最终所有这些启发式方法仍然植根于“逐像素”比较。对于使用ImageMagick 执行的其他一些更高级别的启发式算法,请参阅我的其他一些答案:one -- two -- three。 @CBRF23: ...和原始海报,(at)Hocrux7 甚至在他的问题中提到了“像素”,并且明确不希望比较文件的“内部结构”(即使他的这里的评论再次与它相矛盾)。【参考方案8】:

根据您的需要,转换为文本的解决方案将是最简单和最直接的。我确实认为位图的想法很酷。

【讨论】:

【参考方案9】:

blubeam pdf 软件会为您完成这项工作

【讨论】:

【参考方案10】:

您可以使用 Tarkware Pdf Comparer 批量处理 compare pdf 文件。但它不是免费的,需要 Adob​​e Acrobat。

【讨论】:

以上是关于比较大量 PDF 文件的工具? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

编辑PDF用什么工具比较合适?怎样使用PDF编辑工具去编辑PDF文件?

Linux命令行上的PDF比较

java 生成pdf 怎么设置下划线

在Windows中比较2个二进制文件的工具[关闭]

文件对比工具

手机PDF文件怎么压缩得更小