有时我想比较两种不同设置的结果,看看哪种设置效果更好(例如,在提交文档之前的最终微调期间)。此类设置可能会导致文档中单词和其他元素的位置发生细微变化。
动机
在屏幕上并排查看文档并不总是足够的,而且打印成本太高。
- 有没有一种方法可以叠加两个生成的 PDF(例如一个 PDF 是透明的),以便于轻松比较差异?
- 还可以使用哪些方法来比较两个 PDF?
答案1
你可以试试pdfpagediff
包裹:
\usepackage{pdfpagediff}
\layerPages[<optional page numbers>]{<file1>}{<file2>}
答案2
查看:
和
第一个链接是 Latex 包pdfpagediff,根据作者的说法
通过将 file1.pdf 的每一页与 file2.pdf 的相应页面并列或反之亦然,创建一个复合 PDF。由于 PDF 是透明的,您只需翻阅页面即可在视觉上注意到最细微的变化
另一个链接是一个小窗口程序调用差异PDF,一款 PDF 比较工具,以文本或视觉方式显示 PDF 文件中的差异。您还可以在以下位置找到它的便携式应用程序:
正如 Florian 在评论中提到的,你可以从德国CNET
更新日期:2016 年 1 月 28 日
自从我写了这个答案以来,差异PDF您会在 qtrac.eu 主页上找到(链接在 Florian 的评论中)是商业软件,非常昂贵,并且许可证非常严格。我的答案中的链接仍然有效,并且链接到的可能是该软件的旧版免费版本,或者可能是完全不同的软件。我不确定。
答案3
我使用来自图像魔法适用于 Linux 和 Windows(以及 Mac,如果我没记错的话)。它会生成一个光栅图像,其中所有相同的部分都是半透明的,但差异会以红色突出显示。一个缺点是您必须对 PDF 进行光栅化,并且必须逐页进行。例如,要比较两个 PDF 的第一页,您可以使用:
compare -metric PSNR -density 300 first.pdf[0] second.pdf[0] diff0.png
其中 0 代表第一页(计算机从 0 开始计数)。将其替换为 1 代表第二页,将其替换为 2 代表第三页,等等。密度用于矢量到光栅图像的转换。使用更高的值可以获得更高的分辨率,当然这会占用更多空间和转换时间。可选选项-metric PSNR
还会将差异打印为信噪比。
我自己编写了以下 shell 脚本comparepdfs
,它将两个 PDF 作为两个参数,并<number>diff.png
为所有页面生成显示差异的文件。
#!/bin/bash
FILEA=$1
FILEB=$2
OUTFILE=$3
if [[ -z "$OUTFILE" ]]; then
OUTFILE="diff.png"
fi
DENSITY=72
PAGESA=$(pdfinfo "$FILEA" | grep ^Pages: | sed 's/Pages:\s*//')
PAGESB=$(pdfinfo "$FILEB" | grep ^Pages: | sed 's/Pages:\s*//')
if [[ $PAGESA > $PAGESB ]];
then
PAGES=$(($PAGESA-1))
else
PAGES=$(($PAGESB-1))
fi
for N in `seq 0 "$PAGES"`; do
echo "Comparing page $N / $PAGES."
compare -metric PSNR -density "$DENSITY" "$FILEA[$N]" "$FILEB[$N]" "${N}$OUTFILE";
done
答案4
您可以在以下位置将两个 PDF 文件作为单个图像的图层打开:GIMP,并将顶层设为半透明。您还可以将顶层设置为“减法”或“差异”模式,这样您将可以清楚地看到两个图层之间的差异。