比较PDF内容与Ruby

Rap*_*ael 3 ruby pdf latex

我正在编写一个Ruby脚本/应用程序,可以帮助我将LaTeX编译为(至少)PDF。我希望它具有的功能之一是它应该pdflatex迭代运行,直到PDF收敛为止(我猜应该如此)。

这个想法是将一次迭代中生成的PDF与使用其指纹的前一次迭代中生成的PDF进行比较。特别是,我目前使用Digest::MD5.file(.)

现在的问题是,这永远不会收敛。(希望的)罪魁祸首是PDF的时间戳,时间戳至少设置为秒pdflatex。由于运行时间pdflatex通常超过一秒钟,因此结果不断变化。也就是说,我希望在某个时间点之后,PDF的时间戳等于时间戳。这个假设可能是错误的。提示表示赞赏。

我该怎么办?到目前为止,我的基本想法是:

  • 使用能够胜任工作的图书馆
  • 剥离元数据,仅散列PDF内容
  • 比较前将时间戳记覆盖固定值

您有更多的想法,甚至解决方案吗?解决方案只能使用在Linux上运行的免费软件。这样,只使用Ruby是首选,但是完全可以使用外部软件。

顺便说一句,我不完全了解PDF的编码方式,但我怀疑仅比较包含的文本对我不起作用,因为在以后的迭代中仅图形或链接可能会更改。

可能相关:

Rap*_*ael 5

这可能不是最防弹的解决方案,但它对我有用:

cat file.pdf | grep -a -v "/CreationDate\|/ModDate\|/ID" | md5sum
Run Code Online (Sandbox Code Playgroud)

或来自Ruby

`cat file.pdf | grep -a -v "/CreationDate\\|/ModDate\\|/ID" | md5sum`.strip
Run Code Online (Sandbox Code Playgroud)

在删除导致假定相同的PDF不同的行之后,这将计算PDF的哈希值。

YMMW,取决于您的PDF创建者。使用diff -a file1.pdf file2.pdf找出你需要删除什么其他线路。