根据 PDF 规范,每当 PDF 创建者写出修改后的 PDF 时,它应该更新元数据条目数组中命名/ModDate
的键。/Info
此外,它(可能)会将 PDF 的 XMP 元数据结构中的文档 UUID 更改为新 ID。
因此,当您想使用 MD5(或任何类似方法)检查 PDF 生成过程中的“稳定结果”(考虑单元测试或其他)时,您应该在应用 MD5 求和之前执行以下两件事之一:
- 要么“规范化”您的 PDF 输出以始终将相同的 ModDate 和 UUID 写入文件(如果您的 PDF 生成工具允许您以这种方式进行调整),
- 或对文件运行编辑(您可以使用
sed
)来规范化文件的/ModDate
(并且可能还有/CreationDate
)和 UUID 条目。
更新:由于您似乎pdftk
已经熟悉,您应该能够转储元数据文本文件(如 Ezra 所示):
pdftk in.pdf dump_data output data.txt
或(如果您需要):
pdftk in.pdf dump_data_utf8 output data.utf8.txt
然后编辑 data*.txt 文件以使其适合您的需求:将 PDF UUID(pdftk
调用它们PdfID0
/ PdfID1
)更改为易于识别的值(00000...
和fffff...
),将日期更改为另一个易于识别的日期。然后使用这些元数据值更新您的文件:
pdftk in.pdf update_info data.txt output in-updated.pdf \
&& mv in-updated.pdf in.pdf
或者
pdftk in.pdf update_info data.utf8.txt output in-updated.utf8.pdf \
&& mv in-updated.utf8.pdf in.pdf
然后才运行您的 Md5 校验和,看看它是否有效(或需要更多微调)。