比较两个pdf文件

Ais*_*kar 10 pdf comparison pdfbox

我需要比较两个几乎相似的文件的内容,并突出显示相应的pdf文件中的不同部分.我正在使用pdfbox.请帮助我至少逻辑.

Kur*_*fle 7

如果您更喜欢带有GUI的工具,可以试试这个:diffpdf.它是由Mark Summerfield编写的,因为它是用Qt编写的,所以它应该在Qt运行的所有平台上可用(或者应该是可构建的).

这是一个截图:在此输入图像描述


Kur*_*fle 5

您可以在 Linux 上使用 shell 脚本执行相同的操作。该脚本包含 3 个组件:

  1. ImageMagick的compare命令
  2. pdftk实用程序
  3. 鬼脚本

将其转换为.batDOS/Windows 的批处理文件相当容易...

以下是构建块:

pdftk

使用此命令将多页 PDF 文件拆分为多个单页 PDF:

pdftk  first.pdf  burst  output  somewhere/firstpdf_page_%03d.pdf
pdftk  2nd.pdf    burst  output  somewhere/2ndpdf_page_%03d.pdf
Run Code Online (Sandbox Code Playgroud)

比较

使用此命令为每个页面创建一个“差异”PDF 页面:

compare \
       -verbose \
       -debug coder -log "%u %m:%l %e" \
        somewhere/firstpdf_page_001.pdf \
        somewhere/2ndpdf_page_001.pdf \
       -compose src \
        somewhereelse/diff_page_001.pdf
Run Code Online (Sandbox Code Playgroud)

请注意,这compare是 ImageMagick 的一部分。但对于 PDF 处理,它需要 Ghostscript 作为“代理”,因为它本身无法执行此操作。

再次,pdftk

现在您可以再次将“差异”PDF 页面与以下内容连接起来pdftk

pdftk \
      somewhereelse/diff_page_*.pdf \
      cat \
      output somewhereelse/diff_allpages.pdf
Run Code Online (Sandbox Code Playgroud)

鬼脚本

Ghostscript 会自动将元数据(例如当前日期+时间)插入其 PDF 输出中。因此,这对于基于 MD5 哈希的文件比较效果不佳。

如果您想自动发现由纯白色页面组成的所有情况(这意味着:输入页面中没有明显的差异),您还可以使用输出设备转换为无元数据位图格式bmp256。您可以对原始 PDF(first.pdf 和 2nd.pdf)或 diff-PDF 页面执行此操作:

 gs \
   -o diff_page_001.bmp \
   -r72 \
   -g595x842 \
   -sDEVICE=bmp256 \
    diff_page_001.pdf

 md5sum diff_page_001.bmp
Run Code Online (Sandbox Code Playgroud)

只需创建一个全白的 BMP 页​​面及其 MD5sum(仅供参考),如下所示:

 gs \
   -o reference-white-page.bmp \
   -r72 \
   -g595x842 \
   -sDEVICE=bmp256 \
   -c "showpage quit"

 md5sum reference-white-page.bmp
Run Code Online (Sandbox Code Playgroud)