两个pdf文件的差异?

kru*_*kin 54 pdf

我正在寻找一个好的程序来向我展示两个相似的 pdf 文件之间的差异。特别是,我正在寻找不只是在文件的 ascii 版本(带有“pdftotext”)上运行差异的东西。这就是pdfdiff.py所做的。

qbi*_*qbi 37

您可以为此使用DiffPDF。从描述来看:

DiffPDF 用于比较两个 PDF 文件。默认情况下,比较每对页面上的文本,但也支持比较页面的外观(例如,如果更改图表或重新格式化段落)。也可以比较特定的页面或页面范围。例如,如果 PDF 文件有两个版本,一个是第 1-12 页,另一个是第 1-13 页,因为添加了额外的页面作为第 4 页,可以通过指定两个页面范围来比较它们,1第一个是-12,第二个是1-3、5-13。这将使 DiffPDF 将 (1, 1), (2, 2), (3, 3), (4, 5), (5, 6) 等对中的页面与 (12, 13) 进行比较。

  • 这是我见过的最好的。我看到的唯一问题是它逐页比较 pdf。因此,如果您在第 1 页上添加一个段落,则此后每一页的开头和结尾都不匹配。:( (5认同)
  • 我认为链接不再正确。新版本 3.* 似乎仅适用于 Windows。不过,旧版本 2.* 仍然可以通过 `sudo apt-get install diffpdf` 安装。 (4认同)

kru*_*kin 33

我刚刚想出了一个技巧,使 DiffPDF(@qbi 建议的程序)不仅可以用于微小的更改。我所做的是使用pdfjam将所有页面 pdf 连接成一个长卷轴,然后比较这些卷轴。即使移除或插入大部分,它也能工作!

这是一个完成这项工作的 bash 脚本:

#!/bin/bash
#
# Compare two PDF files.
# Dependencies:
#  - pdfinfo (xpdf)
#  - pdfjam  (texlive-extra-utils)
#  - diffpdf
#

MAX_HEIGHT=15840  #The maximum height of a page (in points), limited by pdfjam.

TMPFILE1=$(mktemp /tmp/XXXXXX.pdf)
TMPFILE2=$(mktemp /tmp/XXXXXX.pdf)

usage="usage: scrolldiff -h FILE1.pdf FILE2.pdf
  -h print this message

v0.0"

while getopts "h" OPTIONS ; do
    case ${OPTIONS} in
        h|-help) echo "${usage}"; exit;;
    esac
done
shift $(($OPTIND - 1))

if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -f "$2" ]
then
  echo "ERROR: input files do not exist."
  echo
  echo "$usage"
  exit
fi

    #Get the number of pages:
pages1=$( pdfinfo "$1" | grep 'Pages' - | awk '{print $2}' )
pages2=$( pdfinfo "$2" | grep 'Pages' - | awk '{print $2}' )
numpages=$pages2
if [[ $pages1 > $pages2 ]]
then
  numpages=$pages1
fi

     #Get the paper size:
width1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $3}' )
height1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $5}' )
width2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $3}' )
height2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $5}' )

if [ $(bc <<< "$width1 < $width2") -eq 1 ]
then
  width1=$width2
fi
if [ $(bc <<< "$height1 < $height2") -eq 1 ]
then
  height1=$height2
fi

height=$( echo "scale=2; $height1 * $numpages" | bc )
if [ $(bc <<< "$MAX_HEIGHT < $height") -eq 1 ]
then
  height=$MAX_HEIGHT
fi
papersize="${width1}pt,${height}pt"



    #Make the scrolls:
pdfj="pdfjam --nup 1x$numpages --papersize {${papersize}} --outfile"
$pdfj "$TMPFILE1" "$1"
$pdfj "$TMPFILE2" "$2"

diffpdf "$TMPFILE1" "$TMPFILE2"

rm -f $TMPFILE1 $TMPFILE2
Run Code Online (Sandbox Code Playgroud)

  • 我使您的脚本与空格兼容并添加了独特的临时文件。我希望你不要介意。 (2认同)
  • 还修复了脚本会在工作目录中创建一个空文本文件的小错误。(请记住始终在使用“&gt;”和相关操作数的 if 语句中使用双括号。) (2认同)
  • 最后一句话:此脚本仅适用于 DIN A4 尺寸的文档。您必须调整 PAGEHEIGHT 值才能使其适用于较小的文档。我确定有一种方法可以自动执行此操作,但不知道如何使用 atm。 (2认同)
  • 感谢您对@Glutanimate 进行改进。我添加了对任意和不同大小的 pdf 比较的支持(只要每个 pdf 中的页面大小一致)。 (2认同)

phy*_*att 10

尽管这不能直接解决问题,但这里有一个很好的方法可以从命令行完成所有操作,并且依赖项很少:

diff <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)
Run Code Online (Sandbox Code Playgroud)

https://linux.die.net/man/1/pdftotext

它非常适用于基本的 pdf 比较。如果您有较新版本的 pdftotext,您可以尝试-bbox代替-layout.

就diffing程序而言,我喜欢使用diffuse,所以命令变化很小:

diffuse <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)
Run Code Online (Sandbox Code Playgroud)

http://diffuse.sourceforge.net/

希望有帮助。


N0r*_*ert 5

作为对上述答案的补充diffdiffuse我们可以使用Meld作为图形比较工具 - 安装它

sudo apt-get install meld
Run Code Online (Sandbox Code Playgroud)

然后使用命令比较文档,例如

meld <(pdftotext -layout old.pdf /dev/stdout) <(pdftotext -layout new.pdf /dev/stdout)
Run Code Online (Sandbox Code Playgroud)

就我个人而言,我更喜欢 Meld,而不是 Kdiff3 的 DiffUse。


小智 5

我们一直在开发一种工具并希望参与其中。

如果您对尝试在线工具感到满意,我们在Draftable.com上构建了一些东西,它可以满足您的需求 - 比较两个 PDF/Word 文件并显示删除和添加内容。

目前,我们的桌面版本仅适用于 Windows;但是,我们也有一个几年前发布的 API,对于处理量大或存在安全问题的人来说,它运行得非常好。

我准备了一个图像(下面的链接),以便您无需访问该站点即可看到所获得的输出类型。非常感谢反馈!

样品对比