windows下pdf文件的比较
在使用latex过程中有时需要进行pdf比较来确定某些更新是否会导致生成的pdf的变化。
pdf比较工具显然是很多的,在python下有diff-pdf、diff-pdf-visually等等,这里一一介绍。
1. diff-pdf-visually 工具
安装
由于diff-pdf-visually依赖于ImageMagick和Poppler,所以windows下安装diff-pdf-visually先要安装这两个依赖库。
-
安装ImageMagick, via https://imagemagick.org/script/download.php
需要注意imagemagick有很多的适用于不同环境的版本,其中有针对mingw的版本,但经测试表明,在windows下还是使用EXE安装版本较好。 -
安装Poppler, via https://blog.alivate.com.au/poppler-windows/
需要注意的是,这个poppler是个绿色版本的,所以只要把它的bin目录放到环境变量path下就好了。
最好使用一个单独的目录来放它,而不是简单的解压到mingw下面,虽然两者的目录结构很类似,由于poppler使用的库文件的版本可能与mingw的不同,所以如果简单的覆盖到mingw下面,可能导致运行不了。 -
安装diff-pdf-visually。
在conda下没有这个包,那么直接用pip安装。
pip install --user diff-pdf-visually
使用
使用通过命令行或者在python脚本中调用
- 命令行中为:
python diff-pdf-visually -v a.pdf b.pdf
其帮助为:
$ diff-pdf-visually -h
usage: diff-pdf-visually [-h] [--silent] [--verbose] [--threshold THRESHOLD]
[--dpi DPI] [--time TIME]
a.pdf b.pdf
Compare two PDFs visually. The exit code is 0 if they are the same, and 2 if
there are significant differences.
positional arguments:
a.pdf
b.pdf
optional arguments:
-h, --help show this help message and exit
--silent, -q silence output (can be used only once)
--verbose, -v show more information (can be used 2 times)
--threshold THRESHOLD
PSNR threshold to consider a change significant,
higher is more sensitive (default: 100)
--dpi DPI resolution for the rasterised files (default: 50)
--time TIME number of seconds to wait before discarding temporary
files, or 0 to immediately discard
- 在脚本中调用
from diff_pdf_visually import pdfdiff
# Returns True or False
pdfdiff("a.pdf", "b.pdf")
说明
尽管能够用其进行pdf比较,但其输出还是比较简单的,只能给出是否存在差异这一信息,无法知道哪个位置存在差异,所以相对来说还是没有使用adobe或者foxit软件来的直观和有效。
2. pdf-diff工具
pdf-diff 实际上在windows下不支持,但现在windows也是可以运行linux的,我们通过wsl安装ubuntu,那么就有了ubuntu环境。
进入ubuntu命令行,输入如下命令,完成安装:
apt-get install python3-lxml poppler-utils
pip install pdf-diff
使用方式:
pdf-diff before.pdf after.pdf > comparison_output.png
进入到需要比较文件所在目录下,运行上述命令就可以得到结果。
结果是一个并排比较的png图片,比如。
3. diff-pdf工具
diff-pdf 则是另一个工具,可以直接在windows下编译。使用编辑的环境是msys。
安装msys2 后,根据diff-pdf的说明使用如下命令更新编译工具:
$ pacman -Syu
$ pacman -S automake autoconf pkg-config make zip
$ pacman -S mingw-w64-i686-{gcc,poppler,wxWidgets}
接着下载diff-pdf到本地解压后,进入其目录,使用如下命令编译;
./bootstrap
$ ./configure
$ make
如果源代码编译不了,那么可以从这里直接下载win下编译好的程序。
实际上也可以在wsl下的ubuntu中编译该工具。上述msys下编译的好处是可以获得一个绿色软件,后面拷贝就能用了。
使用时,使用如下命令:
diff-pdf --output-diff=diff.pdf a.pdf b.pdf
其主要选项包括:
Usage: diff-pdf [/h] [/v] [/s] [/m] [/g] [--output-diff <str>] [--channel-tolerance <num>] [--dpi <num>] [--view] file1.pdf file2.pdf
/h, --help show this help message
/v, --verbose be verbose
/s, --skip-identical only output pages with differences
/m, --mark-differences additionally mark differences on left side
/g, --grayscale only differences will be in color, unchanged parts will show as gray
--output-diff=<str> output differences to given PDF file
--channel-tolerance=<num> consider channel values to be equal if within specified tolerance
--dpi=<num> rasterization resolution (default: 300 dpi)
--view view the differences in a window
结果是一个diff.pdf文件,比如:
其缺点是不显示中文
4. foxit pdf工具
foxit pdf 编辑器,有一个pdf比较功能,直接用就行。这是一个成熟的商业软件,大家自行了解。
参考
- https://pypi.org/project/diff-pdf-visually/
- https://github.com/JoshData/pdf-diff
- https://github.com/vslavik/diff-pdf