84

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

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

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

4

10 回答 10

39

因为没有我们编写过的可用工具。您可以下载i-net PDF 内容比较器并使用它。我希望能帮助其他有同样问题的人。如果您有任何问题或您有反馈给我们,那么您可以联系我们的支持。

在此处输入图像描述

于 2010-02-16T08:34:47.007 回答
20

实际上有一个 diffpdf 工具。

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

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

于 2011-05-03T11:49:15.717 回答
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
于 2010-02-10T08:59:38.717 回答
13

我似乎无法在这里看到这个,所以这里是:通过超级用户:如何比较两个 PDF 文件之间的差异?(答案#229891,@slestak),有

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

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

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

干杯!

于 2011-05-08T06:36:38.637 回答
9

我们还使用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
于 2010-02-10T09:08:33.220 回答
4

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

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

于 2008-09-29T15:04:11.670 回答
1

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

于 2010-08-03T00:09:37.030 回答
1

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

于 2011-02-04T00:52:26.357 回答
0

blubeam pdf 软件将为您执行此操作

于 2010-03-23T13:55:31.710 回答
0

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

于 2010-03-28T21:13:48.163 回答