gpt4 book ai didi

node.js - 为什么通过 pdftk 将多页 PDF 重复拆分为单独的页面会更改这些页面的 md5 校验和?

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:22 25 4
gpt4 key购买 nike

我正在使用 pdftk并进行了一些测试,发现将多页 PDF 文件拆分为单独的单页 PDF 文件,然后为每个单页 PDF 生成一个 md5 哈希校验和(数字指纹),每次我进行拆分时都会产生不同的哈希值。这就是结果,即使它是完全相同的文件且没有任何更改。

我的测试流程是:

  1. 解压 test.pdf(包含 10 页的简单纯文本 PDF)
  2. 使用 pdftk,将 test.pdf 分成 10 个单独的 PDF 文件(每个文件一页)
  3. 为 10 个单页 PDF 文件中的每一个生成 md5 哈希校验和
  4. 记录 10 个哈希校验和
  5. 重复步骤 1-4
  6. 请注意,所有哈希值都不同

旁注:解压后在 PDF 上生成校验和会在重复时产生完全相同的校验和。

我正在使用 node.js及其 crypto本练习的模块。

我的问题是:为什么校验和在重复时会有所不同?我会认为生成的 10 个单页文件与上次创建时完全相同。他们的父文档(以及各个页面本身)根本没有改变。

最佳答案

根据 PDF 规范,每当 PDF 创建者写出修改后的 PDF 时,它应该更新元数据条目的 /Info 数组中名为 /ModDate 的键。

此外,它(可能)会将 PDF 的 XMP 元数据结构中的文档 UUID 更改为新 ID。


因此,当您想使用 MD5(或任何类似方法)检查​​ PDF 生成过程中的“稳定结果”(考虑单元测试或其他)时,您应该在应用 MD5 之前执行以下两件事之一-总结:

  • “规范化”您的 PDF 输出以始终将相同的 ModDate 和 UUID 写入文件(如果您的 PDF 生成工具允许您以这种方式进行调整),
  • 或对规范化 /ModDate(可能还有 /CreationDate)的文件运行编辑(您可以使用 sed)和文件的 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 校验和并查看它是否有效(或需要更多微调)。

关于node.js - 为什么通过 pdftk 将多页 PDF 重复拆分为单独的页面会更改这些页面的 md5 校验和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com