1

我正在尝试使用此答案中提到的 iTextSharp解析特定 pdf ( this ) 的 ID 。但是我得到了 ID 的空数组,而我可以看到另一个 pdfReader (pdf.js) 可以将 id 读取为. 为什么这种行为不同?我是否应该从预告片以外的其他地方读取 ID 字段?77a2a5c4fc17dc3a91a072c46fe69ec0

4

1 回答 1

2

在文本编辑器中打开带有 ID 的常规 PDF,如下所示:

在此处输入图像描述

就在它说的位置之前startxref,您会看到一本字典(它以 开头<<)。那是PDF的预告片字典。其中一个(可选)条目是/ID包含两个 PDF 字符串的数组。

如果您的 PDF 有这样的条目,那么使用 iTextSharp 提取 PDF 文档的 ID问题的答案将不会返回null

现在在文本编辑器中打开您的 PDF:

在此处输入图像描述

您再次看到之前的字典(预告片字典startxref。但是,在这种情况下,字典只有三个条目:(/Size交叉引用表中的对象数)、/Info(对包含元数据的字典的引用)和/Root(对目录字典的引用)。

没有/ID条目,因此 iText(和 iTextSharp)应该返回null(并且您确认它们会返回)。

现在搜索77a2a5c4fc17dc3a91a072c46fe69ec0您在文本编辑器中打开的 PDF 中的值。你不会在任何地方找到那个价值,因为它根本不存在!

总结:你的问题我是否应该从预告片以外的其他地方读取 ID 字段?是错的。你在问如何阅读不存在的东西。您的问题应该是:为什么 pdf.js 为没有 ID 的 PDF 创建 ID,以及如何检索它?第一部分的答案是合理的:即使是 iText 在您操作 PDF 时也会尝试创建一个/ID,因为 PDF 拥有一个 ID 是一种很好的做法。第二部分的答案是:看预告片(但你已经知道了)。

结论:根据评论中的反馈,事实证明 OP 正在使用fingerprint()pdf.js 中的方法。如果 ID 存在,则此方法返回 ID 的第一个元素。如果没有找到 ID,则返回 MD5 哈希。请参阅pdf.js中方法的源代码。fingerprint()

于 2015-10-23T15:20:29.800 回答