比较两个 PDF 的输出

比较两个 PDF 的输出

有时我想比较两种不同设置的结果,看看哪种设置效果更好(例如,在提交文档之前的最终微调期间)。此类设置可能会导致文档中单词和其他元素的位置发生细微变化。

动机

在屏幕上并排查看文档并不总是足够的,而且打印成本太高。

  • 有没有一种方法可以叠加两个生成的 PDF(例如一个 PDF 是透明的),以便于轻松比较差异?
  • 还可以使用哪些方法来比较两个 PDF?

答案1

你可以试试pdfpagediff包裹:

\usepackage{pdfpagediff}
\layerPages[<optional page numbers>]{<file1>}{<file2>}

答案2

查看:

PDF页面差异

DiffPDF(免费版)

第一个链接是 Latex 包pdfpagediff,根据作者的说法

通过将 file1.pdf 的每一页与 file2.pdf 的相应页面并列或反之亦然,创建一个复合 PDF。由于 PDF 是透明的,您只需翻阅页面即可在视觉上注意到最细微的变化

另一个链接是一个小窗口程序调用差异PDF,一款 PDF 比较工具,以文本或视觉方式显示 PDF 文件中的差异。您还可以在以下位置找到它的便携式应用程序:

便携式应用 DiffPDF 2.1.3

正如 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,并将顶层设为半透明。您还可以将顶层设置为“减法”或“差异”模式,这样您将可以清楚地看到两个图层之间的差异。

相关内容