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


84

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

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

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


3
部分答案是使用pdftotext并比较其中包含的文本。
Sklivvz

但这将忽略所有非文本信息,例如线条,框,图片,图表等。我认为,它也不会显示文本的视觉位置,而是结构位置。
Horcrux08年

我同意,这还不够。另一方面,这是一个必要的标准,因此它足以作为单元测试。
Sklivvz

以前从未遇到过这种情况,但是我已经尝试过ExamDiff Pro来比较PDF,它对我有用
cubex

您以后总是可以添加更好的单元测试!
Sklivvz

Answers:


39

因为没有可用的工具,所以我们已经编写了一个。您可以下载并使用i-net PDF内容比较器。希望对其他有相同问题的人有所帮助。如果您有任何问题或对我们有反馈,则可以联系我们的支持。

在此处输入图片说明


该工具的优点是它既不是纯文本比较器也不是图像比较器。它按结构进行比较,检查包含的元素是否“相同”-因此,您比较的PDF不必匹配100%,而是在可定义的相似性之内。而且是免费的。
gamma

我也推荐这个!它在文档上崩溃了,所以我将其发送给他们。他们解决了!:DI感觉很好。它可以生成具有差异的图像,也可以在控制台中提供文本报告。
Janus Troelsen

4
@gamma该应用程序在哪里免费?每年费用至少为200美元(!)。30天免费一次。对于我来说,这样做太昂贵了。
ygoe

@LonelyPixel是的,您是对的。1.0版是免费的(截至2010年10月14日)。我们已经对其进行了相当多的更改,现在它已成为一种付费工具(2012-10)。但是,您可以无限制地试用30天。它确实获得了许多新功能,稳定性和可靠性。希望您仍然对它有所了解;)
gamma

我也需要比较pdf文件-我想出了一个使用apache pdfbox的罐子。查看此testautomationguru.com/…以获取示例和下载。
Vins 2015年


13

我使用了自制脚本

  • 将两个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

1
为什么不共享完整脚本?
Janus Troelsen,

1
这就是我用来合成的内容: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
Janus Troelsen,

这是一个不会将临时文件写入磁盘并使用Poppler的pdftoppm(比Ghostscript更快)的脚本:gist.github.com/brechtm/891de9f72516c1b2cbc1。它为pdfdiff目录中PDF的每一页输出一个JPG,并另外打印两个PDF之间不同的页数。
Brecht Machiels '16


9

我们还使用了pdftotext(请参见Sklivvz的答案)来生成ASCII版本的PDF,并使用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

4

我认为您最好的方法是将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

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


我认为比较2张图像比比较PDF文件本身要复杂得多。
Horcrux7年

可以使用GnuWin32 tiffcmp比较图像。我将更新我的答案以对此进行详细说明。
danio

1

我们的产品PDF Comparator- http://www.premediasystems.com/pdfc.html “-可以非常有效地优雅地完成此操作。它也不是免费的,并且是Mac OS X专用的应用程序。


此工具逐像素比较。这很简单。问题是像人类一样进行比较。
Horcrux7年

1
@ Horcrux7:但是,除了比较“逐个像素”之外,人眼还如何比较外观相似的不同页面?
Kurt Pfeifle

@KurtPfeifle-我意识到这是一个古老的评论...但是人类不会以像素为单位比较图像;人们比较图像差异的方式非常复杂,但是在很大程度上依赖于模式识别和启发式算法。
CBRF23

@ CBRF23:是的,我知道这一点,但最终所有这些启发式方法仍然植根于“逐像素”比较。有关使用的其他更高级别的启发式方法, ImageMagick请参阅我的其他一些答案: --
Kurt Pfeifle 2015年

@ CBRF23:...和原始海报,在(Hocrux7)甚至在他的问题中提到“像素”,并且明确地不希望将文件的“内部结构”进行比较(即使他在这里的评论再次与之矛盾)。
Kurt Pfeifle 2015年

1

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



0

您可以使用Tarkware Pdf比较器批量比较pdf文件。但是它不是免费的,需要Adobe Acrobat。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.