如何追踪 PDF 之间的更改?

如何追踪 PDF 之间的更改?

我有一份相当大的文档(约 60 页),包含两个版本(其中一个版本经过改进)的技术文档。不幸的是,我似乎丢失了旧版本的源代码(但我有最新文档的代码)。

我想比较该文档的两个版本(PDF 格式),看看两者之间有什么变化,最好是diff类似的格式。

两个版本之间没有太大的变化,但一些细节很重要,但很容易被忽视。

非常感谢您对如何高效、有效地实现此目标的建议。也欢迎非 TeX 相关的解决方案,包括非免费的解决方案。

我应该指出的是,这些文献仅包含文本,只有很少的图表和少量的公式。

编辑: 这些文档是我自己用 pdfLaTeX 创建的,如果您认为我使用的软件包中有相关信息,我也可以提供。

编辑2:很多好的、有希望的答案!我会努力在某一天尝试所有这些答案,并将结果发布在这里。这可能会成为一个很好的社区维基。

答案1

我对这里建议的一些方法进行了快速比较。这个答案将成为社区 wiki,我将把它作为公认的答案。希望没有人会介意失去 15 个声望。我赞成所有有用的答案,并敦促您也这样做——它们都是有潜力的想法。


  1. Adobe Acrobat Professional -- 比较文件

    我使用 Acrobat 8​​ 进行此测试(这可能是我第一次感谢上级让我的组织主要使用 Windows)。设置非常简单 - 转到先进的->比较文件...,然后填空。我认为这很容易。嗯……

    专业提示——不要选择详细分析(慢)。你以后会感谢我的。我第一次这样做,这东西已经运行了10分钟,我们可以这样说,Acrobat 现在是世界奖的骄傲拥有者内存消耗惊人,高达 750(七百五十,不是笔误)MB。这让我想起除了打印前校对外,我不使用 Acrobat 是有原因的。

    我尝试过并排报告正常分析,如果我的修订版没有比原版多出 8 页左右,那么这种方法应该会很有效。它没有意识到文档中某处有相同的文本——据我所知,它只是将两份文档或多或少地并排放置,并添加了一些花哨而无用的颜色。天哪。我本可以自己做这件事,而不必拿出利比里亚的许可证赤字。此时,我不想再尝试进行详细分析,据说详细分析可以检测到此类情况。

    我会给它一个-1/10,因为它有一个无用的选项,实际上不起作用,而且效果非常显著。

    更新:Geoffrey 在处理一个看似相似的文档时,对 Acrobat 的使用体验有所不同,我尝试重复他的做法。第一次尝试时,我使用了逐页比较选项,这是如此不令人满意,而现在我尝试了文本差异。这正如他建议的那样,尽管如果选择综合报告选项,并且仍然难以解释并排报告。它仍然没有像人们习惯格式时所期望的那样,并排显示每个文档中相等的文本部分,diff而是以不同的方式突出显示通用文本和每个版本特有的文本。至少,有一个注释说明您可以在另一文档的哪一页找到匹配的文本,所以这很有用,尽管并不完全方便用户使用。此外,我注意到它在某些地方很混乱,匹配看似随机的单词和单词片段。

    这将显著提高 Acrobat 的得分,我认为7/10是合适的,扣除不菲的许可费后即可获得整整两个积分——我使用的公式是:

    licensePenalty = max(0, len(str(licenseFeeInUSD))-1)

    除此之外,它运行良好,并且性能也与 Geoffrey 观察到的相似。

  2. Adobe Acrobat Professional——以 .txt 格式导出。 +diff

    这还算管用。如果不是因为令人讨厌的连字符乱码,大部分文本都会正确显示。另外,我的文本是瑞典语,有相当多的变音符号也丢失了。连字符也偷偷溜了进来(相当烦人——瑞典人有时说的单词很长)。格式很糟糕,但可能可以用智能脚本修复$FAVOURITE_INTERPRETED_LANGUAGE

    我会给6/10努力,但只是因为 diffing 确实有效。文本在某些地方不太可读,例如看起来träfftr".

  3. diffpdf

    我在寻找可以在 Ubuntu 上安装的 diff 类程序时发现了这个小宝贝。可从http://www.qtrac.eu/diffpdf.html. 需要 Qt 和 Poppler。

    这实际上比 Acrobat 的正常分析模式——差异被很好地突出显示,显而易见。它像 Acrobat 一样进行逐页比较,如果您知道在哪里插入了附加页面,似乎有一种方法可以进行更好的比较,但这样做并不简单,而且我懒得查看文档以找出究竟添加了哪些页面——这有点像使用工具来做这件事的意义,不是吗?

    我会给它一个4/10对于这个特定的问题,虽然对于其他一些小的改变,它会工作得很好,值得一个8/10(用户界面可能有点混乱)。

  4. pdftotext+diff

    对于那些不知道的人来说,pdftotext 是 xpdf 集合的一部分,可以从这里获得:http://www.foolabs.com/xpdf/home.html。我在Ubuntu上使用的是Linux版本。

    这比 (2) 效果更好,但连字符被替换为看起来像 UTF-8 符号的符号,如fiffffl等。引号也被弄乱了,再次被替换为 UTF 符号(写作时,我总是使用“正确的” TeX``''引号)。但是,即使使用这样的组合,文本搜索也能完美运行。如果您最喜欢的文本编辑器可以理解和呈现 UTF-8,那么可读性会好得多,格式也会得到改善,尽管只是一点点。但是,连字符得到了处理,这非常好。但是有一件烦人的事情——页眉和页脚以及页码会进入文本文档,这在比较版本时可能会令人沮丧。

    这值得一个艰难的9/10,其中 UTF-8 符号混乱会被扣分,转换过程中的页眉和页脚问题也会被扣分(最后一个问题会导致很多“误报” diff)。

答案2

我会尝试pdftotext比较这两个文本文件。如果文件主要都是文本,这种方法可能会奏效。为了比较文本文件,您可能需要一个比 diff 更高级的程序,因为两个文件中的换行符可能不同。我不确定该推荐什么。

答案3

Adobe Acrobat Pro 可以直接比较 PDF。该工具位于菜单中:文档->比较文档...

您可以选择是否包含或忽略仅格式、仅页眉/页脚等的更改。假设两个 PDF 都是使用相同的工作流程生成的(例如,都使用 pdflatex 但源文件的版本略有不同),这是相当好的。

每次我从存储库更新我的 latex 包时,我都会重新整理一些大型文档(例如我自己的论文和我下载的一些其他论文),并以此方式比较生成的 PDF,以查看是否有任何变化。这是一种发现 latex 包中模糊错误的好方法,这些错误会因某种原因更改换行符或间距。

答案4

如果你正在寻找小的变化,那么pdfpagediff可能对你有用。该软件包覆盖了两个 pdf 文件,让你可以轻松发现细微的变化。

如果两个版本存在显著差异,它就没有用处。

相关内容