比较大量PDF文件的工具?

时间:2020-03-06 14:50:37  来源:igfitidea点击:

我需要比较大量的光学内容的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专用的应用程序。