从iTextSharp读取的pdf的ID与pdf.js之间的差异

时间:2015-10-23 15:06:23

标签: pdf itextsharp pdfjs

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

1 个答案:

答案 0 :(得分:2)

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

enter image description here

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

如果您的PDF有这样的条目,那么问题Extract ID of a PDF document using iTextSharp的答案将不会返回null

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

enter image description here

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

没有/Root条目,因此iText(和iTextSharp)应该返回/ID(并且您确认他们这样做了。)

现在在文本编辑器中打开的PDF中搜索值null。你在的任何地方都找不到这个价值,因为它不在那里!

摘要:您的问题我是否希望从预告片以外的其他地方读取ID字段?错误。你在问如何阅读那些不存在的东西。你的问题应该是:为什么pdf.js为没有PDF的PDF创建一个ID,我该如何检索它?第一部分的答案是合理的:即使是iText尝试在操作PDF时创建77a2a5c4fc17dc3a91a072c46fe69ec0,因为PDF具有ID的良好做法。第二部分的答案是:查看预告片(但你已经知道了)。

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