我正在尝试使用this中提到的iTextSharp来解析特定pdf(this answer)的ID。但我得到ID的空数组,而我可以看到另一个pdfReader(pdf.js)可以将id读作77a2a5c4fc17dc3a91a072c46fe69ec0
。为什么这种行为有所不同?我是否希望从预告片以外的其他地方读取ID字段?
答案 0 :(得分:2)
在文本编辑器中打开带有ID的常规PDF,如下所示:
在它显示startxref
之前,您会看到一个字典(以<<
开头)。这是PDF的预告片词典。其中一个(可选)条目是/ID
,它是一个包含两个PDF字符串的数组。
如果您的PDF有这样的条目,那么问题Extract ID of a PDF document using iTextSharp的答案将不会返回null
。
现在在文本编辑器中打开PDF:
你再次在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。