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

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

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

有帮助吗?

解决方案

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

enter image description here

其他提示

实际上有一个 diffpdf 工具。

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

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

我使用了一个自制的脚本

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

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

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

(Ubuntu Natty 的构建步骤可以在 获取 diff-pdf.sh)

据我所知,它基本上覆盖了pdf中每个页面的文本/图形,让您可以轻松查看是否有任何更改...

干杯!

我们也用过 pdf转文本 (参见 Sklivvz 的回答)生成 ASCII 版本的 PDF 和 差异 来比较它们。

使用 pdftotext 的 -layout switch 以增强可读性并了解布局的变化。

要从 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

我认为最好的方法是将 PDF 转换为具有合适分辨率的图像,然后进行图像比较。

要从 PDF 生成图像,您可以使用 Adob​​e PDF Library 或建议的解决方案 将 pdf 文件转换为 tiff 文件的最佳方法.

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

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

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

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

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

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

blubeam pdf 软件将为您完成此操作

你可以批量 比较 PDF 使用 Tarkware Pdf Comparer 生成文件。但它不是免费的并且需要 Adob​​e Acrobat。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top