比较大量PDF文件的工具?

时间:2008-09-28 11:02:13

标签: testing pdf compare

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

  • 文本的分块可以是不同的
  • 写入顺序可以不同
  • 位置可以有些不同的像素

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

10 个答案:

答案 0 :(得分:39)

因为没有这样的工具,我们已经写了一个。您可以下载i-net PDF content comparer并使用它。我希望帮助其他同样的问题。如果您遇到问题或者我们有反馈意见,那么您可以联系我们的支持。

enter image description here

答案 1 :(得分:19)

实际上有一个diffpdf工具。

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

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

答案 2 :(得分:12)

我使用了自制的脚本

  • 将两个PDF上的所有页面转换为位图
  • 将PDF 1的页面颜色设置为红白色
  • 在PDF 2的页面上将白色变为透明
  • 在PDF 1
  • 的相应页面顶部覆盖PDF 2的每一页
  • 运行转换/着色并在多个核心上并行覆盖

使用的软件:

  • GhostScript for PDF-to-bitmap conversion
  • 用于着色,透明度和叠加的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

答案 3 :(得分:11)

我似乎无法在此处看到这一点,所以这里是:通过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(s)中每个页面的文本/图形,让您可以轻松查看是否有任何更改......

干杯!

答案 4 :(得分:8)

我们还使用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

答案 5 :(得分:4)

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

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

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

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

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

这仍然存在问题,即它并不总是捕获生成的字体名称的更改。

答案 6 :(得分:1)

我们的产品,PDF Comparator - http://www.premediasystems.com/pdfc.html“ - 将非常优雅和高效地完成此任务。它也不是免费的,并且仅是Mac OS X应用程序。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

bluebeam pdf软件将为您做到这一点

答案 9 :(得分:0)

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