ruby - 将 PDF 内容与 Ruby 进行比较

标签 ruby pdf latex

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

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

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

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

  • 使用能够胜任这项工作的图书馆
  • 去除元数据,只散列 PDF 内容
  • 比较前用固定值覆盖时间戳

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

顺便说一句,我不完全知道 PDF 是如何编码的,但我怀疑仅仅比较包含的文本对我来说不起作用,因为在以后的迭代中只有图形或链接可能会发生变化。

可能相关:

最佳答案

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

grep -av -e '^/CreationDate' -e '^/ModDate' -e '^/ID' file.pdf | md5sum

或者来自 Ruby

`grep -av -e '^/CreationDate' -e '^/ModDate' -e '^/ID' file.pdf | md5sum`.chop!

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

YMMV,取决于您的 PDF 创建者。要找出您需要删除的其他行,请使用

diff -a file-1.pdf file-2.pdf | less

关于ruby - 将 PDF 内容与 Ruby 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797307/

相关文章:

ruby-on-rails - 如何综合分析我的 Ruby 测试套件?

latex - 删除部分编号但在 LaTeX 的目录中显示编号

ruby-on-rails - 查找域的 IP 地址

ruby - sublime text 看不懂gets.chomp

java - iText: Table(com. lowagie. text) 创建只占整个页面的80%,如何让它利用整个页面

php - TCPDF 的 getNumLines() 有时会出错

swift - 如何在 PDF 文件上保存水印并导出到桌面 macOS Mojave

LaTeX文档单词统计

python - 使用 python 从 LaTeX 文件中提取特定部分

javascript - 如何使用 :include option in Rails? 渲染 array.to_json