【问题标题】:Tool to compare large numbers of PDF files? [closed]比较大量 PDF 文件的工具? [关闭]
【发布时间】:2010-09-13 19:47:39
【问题描述】:

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

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

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

【问题讨论】:

  • 部分答案是使用pdftotext 并比较包含的文本。
  • 但这会忽略所有非文本信息,如线条、框、图片、图表等。我认为它也不会显示文本的光学位置,而是结构位置。
  • 我同意,这不是一个充分的标准。另一方面,它是一个必要的标准,因此它作为一个单元测试是足够的。
  • 以前从未遇到过您的情况,但我尝试ExamDiff Pro 比较 PDF,它对我有用。
  • 以后可以随时添加更好的单元测试!

标签: testing pdf compare


【解决方案1】:

因为没有我们编写的工具可用。您可以下载i-net PDF content comparer 并使用它。我希望能帮助其他有同样问题的人。如果您对此有疑问或有反馈意见,请联系我们的支持。

【讨论】:

  • 这个工具的优点是,它既不是纯文本比较器,也不是图像比较器。它按结构进行比较,检查包含的元素是否“相同”——因此您比较的 PDF 不必匹配 100%,而是在可定义的相似性范围内。而且是免费的。
  • 我也推荐这个!它在一个文件上崩溃了,所以我把它寄给了他们。他们修好了! :D 我感觉很好。它可以生成有差异的图像,也可以在控制台中为您提供文本报告。
  • @gamma 该应用程序在哪里免费?每年至少要花费 200 美元(!)。 30天内只有一次免费。这对我来说太贵了。
  • @LonelyPixel 是的,你是对的。 1.0 版是免费的(截至 2010 年 10 月 14 日)。我们对其进行了相当多的更改,现在它是一个付费工具(2012-10)。但是,您可以尝试 30 天,没有任何限制。它确实获得了许多新功能、稳定性和可靠性。我希望你仍然看看它;)
  • 我也需要比较 pdf 文件——我想出了一个使用 apache pdfbox 的 jar。以testautomationguru.com/… 为例并下载。
【解决方案2】:

其实有一个diffpdf工具。

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

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

【讨论】:

【解决方案3】:

我使用了一个自制的脚本

  • 将两个 PDF 中的所有页面转换为位图
  • 将 PDF 1 的页面着色为红底白字
  • 在 PDF 2 页面上将白色更改为透明
  • 将 PDF 2 中的每一页叠加在 PDF 1 中相应页面的顶部
  • 在多个内核上并行运行转换/着色和叠加

使用的软件:

  • 用于 PDF 到位图转换的 GhostScript
  • ImageMagick 用于着色、透明度和叠加
  • 通知同步并行进程
  • 任何支持 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

【讨论】:

  • 为什么不分享完整的脚本?
  • 这是我用来合成的: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
  • 这是一个不将临时文件写入磁盘并使用 Poppler 的 pdftoppm 的脚本,它比 Ghostscript 更快:gist.github.com/brechtm/891de9f72516c1b2cbc1。它为pdfdiff 目录中的 PDF 的每一页输出一个 JPG,并另外打印两个 PDF 之间不同的页数。
【解决方案4】:

这里好像看不到,所以这里是:via 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中每个页面的文本/图形,让您轻松查看是否有任何变化......

干杯!

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

      • 我认为比较 2 个图像比比较 PDF 文件本身更复杂。
      • 可以使用 GnuWin32 tiffcmp 比较图像。我将更新我的答案以详细说明这一点。
      【解决方案7】:

      我们的产品,PDF Comparator - http://www.premediasystems.com/pdfc.html" - 将非常优雅和高效地做到这一点。它也不是免费的,并且是仅适用于 Mac OS X 的应用程序。

      【讨论】:

      • 此工具逐像素比较。这很简单。问题是像人类一样进行比较。
      • @Horcrux7:但是除了逐像素比较之外,人眼还能如何比较外观相似的不同页面?!?
      • @KurtPfeifle - 我意识到这是一个老评论......但人类确实在逐个像素的基础上比较图像;人类比较图像差异的方式非常复杂,但很大程度上依赖于模式识别和启发式算法。
      • @CBRF23: 是的,我知道这一点——但最终所有这些启发式方法仍然植根于“逐像素”比较。对于使用ImageMagick 执行的其他一些更高级别的启发式算法,请参阅我的其他一些答案:one -- two -- three
      • @CBRF23: ...和原始海报,(at)Hocrux7 甚至在他的问题中提到了“像素”,并且明确不希望比较文件的“内部结构”(即使他的这里的评论再次与它相矛盾)。
      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

        blubeam pdf 软件会为您完成这项工作

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-09
            • 2012-12-17
            • 1970-01-01
            • 2015-11-09
            相关资源
            最近更新 更多