比较大量PDF文件的工具?
我需要比较大量的光学内容的PDF文件。由于PDF文件是在不同的平台上以及使用不同版本的软件创建的,因此存在结构差异。例如:
- 文本的分块可以不同
- 写入顺序可以不同
- 位置可能会有所不同一些像素
它应该像人类一样比较内容,而不是内部结构。我想要测试我们使用的PDF生成器的不同版本之间的回归。
解决方案
我认为我们最好的方法是将PDF转换为具有适当分辨率的图像,而不是将图像进行比较。
要从PDF生成图像,我们可以使用Adobe PDF Library或者"最佳方法"中建议的将pdf文件转换为tiff文件的解决方案。
为了比较生成的TIFF文件,我发现GNU tiffcmp(用于Windows的GnuWin32 tiff)和tiffinfo做得很好。使用tiffcmp -l并计数输出的行数以发现任何差异。如果我们愿意对内容进行少量更改(例如抗锯齿差异),请使用tiffinfo计数像素总数,然后可以生成百分比差异值。
顺便说一下,对于任何进行简单PDF比较而不更改结构的人,可以使用命令行diff并忽略某些模式,例如使用GNU diff 2.7:
diff --brief -I xap: -I xapMM: -I /CreationDate -I /BaseFont -I /ID --binary --text
这仍然存在一个问题,即它并不总是捕获生成的字体名称中的更改。
我使用了自制脚本
- 将两个PDF上的所有页面转换为位图
- 将PDF 1的页面彩色化为红白色
- 在PDF 2的页面上将白色更改为透明
- 将PDF 2中的每一页覆盖在PDF 1中的相应页面之上
- 在多个内核上并行运行转换/着色和叠加
使用的软件:
- 用于PDF到位图转换的GhostScript
- ImageMagick用于着色,透明和覆盖
- inotify同步并行进程
- 任何具有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
我们还使用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
因为没有可用的工具,所以我们已经编写了一个。我们可以下载并使用i-net PDF内容比较器。希望对其他有相同问题的人有所帮助。如果我们有任何疑问或者对我们有反馈,则可以联系我们的支持。
blubeam pdf软件将为我们做到这一点
我们可以使用Tarkware Pdf比较器批量比较pdf文件。但是它不是免费的,需要Adobe Acrobat。
我们的产品" PDF比较器http://www.premediasystems.com/pdfc.html"将非常优雅,高效地完成此操作。它也不是免费的,并且是Mac OS X专用的应用程序。