Ais*_*kar 10 pdf comparison pdfbox
我需要比较两个几乎相似的文件的内容,并突出显示相应的pdf文件中的不同部分.我正在使用pdfbox.请帮助我至少逻辑.
如果您更喜欢带有GUI的工具,可以试试这个:diffpdf.它是由Mark Summerfield编写的,因为它是用Qt编写的,所以它应该在Qt运行的所有平台上可用(或者应该是可构建的).
这是一个截图:
您可以在 Linux 上使用 shell 脚本执行相同的操作。该脚本包含 3 个组件:
compare命令pdftk实用程序将其转换为.batDOS/Windows 的批处理文件相当容易...
以下是构建块:
使用此命令将多页 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 作为“代理”,因为它本身无法执行此操作。
现在您可以再次将“差异”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)