如何使用 pdflatex 生成字节一致的文档?

如何使用 pdflatex 生成字节一致的文档?

当我对同一个 .tex 文件运行 pdflatex 两次时,它产生的结果在我看来是相似的,但文件的内容略有不同(如 md5 校验和所示)。我是否可以将任何标志传递给 pdflatex 以保持输出一致?

我的 PDF 中可能包含哪些环境敏感元数据?我该如何控制它?

更新:执行 diff -a 后,我发现以下内容:

> /CreationDate (D:20100413035938Z)
< /ModDate (D:20100413035938Z)
---
> /CreationDate (D:20100413041320Z)
> /ModDate (D:20100413041320Z)
106c106
< /ID [<41D2805AE64117914EDF6E09554EABAE> <41D2805AE64117914EDF6E09554EABAE>] >>
---
> /ID [<071832DAA2E77E13D96460479D9C6664> <071832DAA2E77E13D96460479D9C6664>] >>

答案1

您可以使用 Pdftex 的原语更改 PDF 的信息字典的内容\pdfinfo

\def\fixedpdfdate{D:20100413000000+00'00'}
\pdfinfo{
    /创建日期 (\fixedpdfdate)
     /ModDate (\fixedpdfdate) }

把这个放在文档的开头:字典可能会被分成几块写出来,有一定的风险。

后记 谢谢问题的重复在 tex.stackexchange.com 上被问到,我了解到/IDPDF 末尾传递的值startxref在 Pdftex 的每次调用中仍然会发生变化。您可以破坏 的内容,显然不会产生不良影响:编辑 PDF标识符/ID之间的文本,如下所示: /IDstartxref

/ID [<B74AEC0FBDE0F25D7D2F5099291FEC6F> <B74AEC0FBDE0F25D7D2F5099291FEC6F>] >>
开始引用
到:/ID [<0> <0>] >> startxref

我怀疑是否有可能确保 /ID 在 Pdftex 内部保持不变,但也许可以在 Luatex 中做到这一点。

答案2

看一下-I以下选项diff

   -I PATTERN  --ignore-matching-lines=PATTERN
          Ignore changes whose lines all match PATTERN.

相关内容