如何在Windows上比较两个PDF文件之间的差异?


Answers:


109

使用xdocdiff插件尝试WinMerge。两者都是完全免费的。没有任何附加条件。


以下几条评论建议他们看不出任何区别。这表示该插件未正确安装。这是如何做:

  1. 将文件放在xdocdiff插件的自述文件说要放置的位置(有两个位置;由于文件名可以更改,因此我不会在此处列出它们,等等—阅读自述文件)

  2. 在WinMerge中,转到“插件”>“列表”,然后选中“启用插件”复选框(xdocdiff自述文件中缺少此步骤)

  3. 在WinMerge中,选择“插件”>“自动拆包”(在第2步之前已禁用)

然后进行比较时,您将在比较窗口中看到类似于文本文件的外观。


尝试过此操作,但不使用xdocdiff插件时看不到任何区别。在WinMerge的UI中可以选择吗?
Umber Ferrule 2012年

1
查看PDF中的二进制文本的目的是什么?我希望看到i-net PDFC所做的视觉差异。
JJD

有什么办法可以使此句柄列中断?没有它,一个变化就会变成几个变化。
Stuart

1
Plugins > List and tick the "Enable Plugins" checkbox是我所缺少的!
Seph 2014年

WinMerge差异窗口中显示的PDF的文本版本中缺少许多字符
cja

168

在Linux和Windows上,可以使用diffpdf(与diff-pdf本主题中提到的有所不同)。

在此处输入图片说明

在Ubuntu上使用以下命令进行安装:

sudo apt-get install diffpdf

有关在文本或视觉上比较pds的更多信息,请参见此UbuntuGeek页面

对于Windows而言,此Diffpdf Windows版本确实非常有用。您可以从http://soft.rubypdf.com/software/diffpdf下载(向下滚动到Win32静态版本)。


12
专有名称为DiffPDF(如屏幕截图所示),它基于Qt 4和Poppler库,因此移植。参见DiffPDF主页:qtrac.eu/diffpdf.html。有关Windows构建的信息在这里:soft.rubypdf.com/software/diffpdf。而且您的安装说明也适用于Debian。
przemoc

3
DiffPDF主页现在具有Linux,Windows安装程序和Mac DMG安装的链接(qtrac.eu/diffpdf.html)。
studgeek 2012年

6
我认为DiffPDF是此处介绍的最先进的工具。它不仅提供了很好的图形比较,而且还比其他方法(例如WinMerge的xdocdiff)更加智能地跟踪更改。但是,它有一个严重的问题:它将比较限制在页面之间。这意味着,如果您在文档A的第2页上有一些文本,但是此文本移至文档B的第3页,则该工具认为它已在A中消失并在B中添加
。– caw

7
较早的免费版本可以在这里
Shafik Yaghmour 2014年

3
我尝试将其用于导出到PDF的小说。不幸的是,该工具在大约10页后便失去了跟踪,并认为所有内容都是“不同的”,即使大段落完全一样。
Eric J.

42

我最近发现了这个,我很喜欢。

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

跨平台,免费,并且运行良好。

这是一个实际的屏幕截图diff-pdf-请注意,PDF中的文本没有什么不同,只有字体(以及相应的布局设置)不同:

diff-pdf.png

获取该图像的调用是:

diff-pdf --view testA.pdf testB.pdf

 

...其中testA.pdf / testB.pdf是通过编译以下简单的Latex文件获得的pdflatex(根据每个pdf,请参见注释):

\documentclass[12pt]{article}


                        % without mathpazo: testA.pdf
\usepackage{mathpazo} % with mathpazo: testB.pdf
\usepackage{lipsum}


\title{A brand new test}
\author{Testulio}

\begin{document}

\maketitle

\lipsum[1-3]

\end{document}

10
只需注意一点diff-pdfDiffPDF可以很好地对更改后的文本进行快速的可视化并排比较,但实际上调试诸如行间距的细微变化之类的东西几乎是不可能的- diff-pdf另一方面,基本上可以放置页面内容从同一页面上的两个比较文件(但使用不同的颜色)中-这样就可以轻松地识别行距问题...干杯!
sdaau 2011年

这很棒!在输出为PDF文件(不使用--view选项)时,是否仍可以跟踪大文件的进度?详细的选项/ v似乎没有任何作用。同样,当您运行命令以生成比较PDF时,它会在单独的进程中运行,因此它不会暂停命令提示符,就像在提示符下执行某些操作时通常会发生的那样。
路加福音

这是我需要的。我正在比较有关数字执行的PDF报告,因此我正在寻找整页中一位数字的差异。问题是,我无法识别青色字符,但是知道区别在哪里,就足以在原始报告中找到它。
manuelvigarcia

22

我们还需要在公司比较PDF,并且对找到的任何解决方案都不满意,因此我们制作了自己的:i-net PDFC。它不是免费的,但我们提供30天的试用期。

它是用Java编写的,因此是跨平台的。

屏幕截图

与众不同的是,它只比较内容而不是文本(或仅将pdf转换为图像并比较图像)。它还具有一个不错的视觉比较工具。


1
不错的软件。
Umber Ferrule 2012年

我无法使它正常工作。加载两个文件,然后单击“比较”按钮,没有任何反应。
Craig Fisher

1
正确处理跨页差异。具有导出/打印功能。不同的比较配置文件(包括自定义)。将鼠标悬停在上方可以为您提供有关更改的更多详细信息。看起来很棒。缺点是试行/费用,不能处理变动。绝对优于获得更高投票的IMO工具。
Jonathan Gawrych '17

@JonathanGawrych感谢您的客气话!您所说的“动作”到底是什么意思?也许我们可以添加该功能...
Epaga

@Epaga如果一段文本从一页移到另一页,则显示为删除和添加。例如,比较c ++建议N4663N4680。参见第19页,示例从第11段移至第8段,但是将其视为添加/删除。要查看实际差异,需要手动检测移动的内容,然后将示例复制到另一个差异工具中,以查看已将内容添加到示例中(unhandled_exception,return_void等)
Jonathan Gawrych


10

我最近想按照以下要求进行操作(比较PDF):

  • 忽略空格,换行符,分页符等。
  • 很容易看到何时只有几个单词发生了变化,而不仅仅是整行/段落。
  • 色差输出

我安装了pdftotext,wdiff和colordiff,可在各种程序包管理器中使用。(带的MacPorts: sudo port install poppler wdiff colordiff

然后:

wdiff <(pdftotext old.pdf -) <(pdftotext new.pdf -) | colordiff

现在,我可以看到哪些词已经很好地改变了颜色。

更多详细信息:http : //philfreo.com/blog/how-to-view-a-color-diff-of-text-from-two-pdfs/

变异:

使用dwdiff可以产生更好的结果。

我还想要HTML输出,所以这个小脚本可以创建一个基本的CSS页面。

bash pc-script.bash old.pdf new.pdf > q.htlm

然后q.html使用您的网络浏览器打开。

pc-script.bash 文件:

#!/bin/bash

OLD="$1"
NEW="$2"

cat <<EOF
<html><head><meta charset="UTF-8"/><title>Changes from $OLD to $NEW</title></head><style>
.plus  { color: green; background: #E7E7E7;                                }
.minus { color: red;   background: #D7D7D7; text-decoration: line-through; }
</style><body><h1>Changes from [ <span class="minus">$OLD</span> ] to [ <span class="plus">$NEW</span> ]</h1><pre>
EOF

dwdiff -i -A best -P      \
  --start-delete='<span class="minus">' --stop-delete='</span>' \
  --start-insert='<span class="plus" >' --stop-insert='</span>' \
  <( pdftotext -enc UTF-8 -layout "$OLD" - )   \
  <( pdftotext -enc UTF-8 -layout "$NEW" - )   \

cat <<EOF
</pre></body></html>
EOF

可以在这里看到输出示例

在此处输入图片说明


@philcolbourn Google+已被关闭,也许可以通过imgur分享屏幕截图?
14:56

首先,我偶然发现了这个小仓库
Myrdd

如果您使用的是Windows,Mac,Fedora,openSUSE或能够从源代码为系统编译二进制文件,则diff-pdf是一种更好的解决方案,无需安装三个不同的依赖项即可完成此任务。不要与另一个答案中提到的diffpdf混淆,后者仅通过GUI起作用。
Hashim

请注意,该pc-script.bash脚本不会转义HTML字符。
费德里科

7

如果要比较pdf内的文本,则“ 超越比较”会执行此操作。

不是免费的,但是有三十天的试用期。


是的,New > Text Compare帮助我了解了2个PDF文件之间文本的基本区别。
瑞安

6

出色的工具,易于使用:Compare-It v4(来自http://www.grigsoft.com/

比较许多不同类型的文件。它具有一些内置转换器,包括一个用于PDF文件的转换器。

我已经使用了很多次,并获得令人满意的结果。

确实应该尝试一下。试用版允许无限期比较。


1
这对我来说是最好的,也是最简单的。谢谢!
Ankur Jain 2012年

我发现要使用的最简单,最简单的工具。我希望我可以不止一次投票!
2015年

对于PDF,比较似乎只是文字上的。上次发布时间为2010年。您可以为此付费,但可以确定有什么区别-我没有看到任何限制?
Zitrax


1

免费,不是最好的,但是...

我打开了两个文档,并使它们彼此分开。

不是最实用的解决方案,但它可以工作!

我还没有看到一个很好的PDF文件DIFF包,虽然手工和烦人,但我的方法可行!


哼...不完全是我想要的,但谢谢。
纳尔逊·里斯

抱歉,我不知道这是一个好答案,只是说我从未找到用于PDF文件的好工具。
William Hilsum

3
交叉眼睛,使两个副本重叠,任何差异都将闪烁。:D
endolith 2014年

此方法的优化版本:通过CTRL + L在acrobat Reader中全屏打开两个PDF文件,然后使用CTRL + F6在PDF文件之间切换,任何移动的地方都不一样...
Bernard Vander Beken 2014年


0

另一个不太理想的解决方案:

  1. 使用免费网站之一将两个PDF都转换为Microsoft Word文档。
  2. 在Word中使用文档比较功能

取决于PDF格式的复杂程度和您要查找的更改类型,这可能没问题。


在这种情况下,这会很困难,因为有很多PDF文档,而且修改非常频繁。但是,谢谢你的建议。
纳尔逊·里斯

对于LaTeX输出也不是很好-我还没有找到可以正确处理连字等的这些转换器之一。
克里斯·H

0

商业:您可以使用原始的Adobe Acrobat Professional,价格高达$ 449:
将修订的PDF与早期版本进行比较

如果您决定使用Acrobat,则此页面上的注释与其用法有关。


“花费高达449美元”……还有多少MB磁盘空间?
休·艾伦,2009年

3
@休·艾伦:拥有大量磁盘空间和注册表中数万个条目的地狱。一个真正的膨胀软件。
harrymc

针对Adobe Acrobat XI的更新的帮助文章:adobe.com/uk/products/acrobat/file-compare-two-pdf-files.html
Squig 2013年

无论如何,这都是越野车:forums.adobe.com/thread/647854?tstart=0
Michal Sokolowski


0

对于两个PDF文件之间的非常原始的同步滚动形式,可以使用我编写的以下自动热键脚本。假设您有两个SumatraPDF窗口打开。在两个窗口中按向右转到下一页,向左按向上一页。

#IfWinActive ,SumatraPDF
Right::
orig := WinExist("A")
WinGet, outvar, List, SumatraPDF
win1 := outvar1
win2 := outvar2
WinActivate, ahk_id %win1%
sendinput {Right}
WinActivate, ahk_id %win2%
sendinput {Right}
WinActivate, ahk_id %orig%
return

Left::
orig := WinExist("A")
WinGet, outvar, List, SumatraPDF
win1 := outvar1
win2 := outvar2
WinActivate, ahk_id %win1%
sendinput {Left}
WinActivate, ahk_id %win2%
sendinput {Left}
WinActivate, ahk_id %orig%
return

0

我使用了这个(不理想,但对我来说足够的)解决方案:

  • 将PDF转换为纯文本(在我的情况下,使用Adobe Reader,免费应用程序)
  • 使用opendiff(包含在XCode中,免费)并查看更改


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.