设想:
我有一个使用 iTextSharp 来搜索 PDF 文件以获取超链接的应用程序。
PDF 中的超链接是文件结构中“注释对象”的子类型,因此我的代码本质上是 (1) 读取文件,(2) 循环浏览页面,(3) 获取页面的注释集合,以及 ( 4) 提取页面的超链接注释。
问题
有时,表示给定页面的“pdf 字典”对象没有注释集合 (no /ANNOTS
) 键。因此试图获得这样的集合返回null
。这是一个问题,因为它不时发生在相关页面上有明显可见和可点击的链接时。
请注意,可点击在这里很重要,因为我知道纯文本中可能存在 URL 地址,但我不关心这些,只关心真实的超链接。
代码
我通过提供的答案发现了类似的 SO 问题(http://stackoverflow.com/questions/6959076/reading-hyperlinks-from-pdf-file)几乎正是我已经在使用的代码。关键区别在于:
// My code
var pdfAnnotations = (PdfArray)PdfReader.GetPdfObject(pageDict.Get(PdfName.ANNOTS));
foreach (var annotation in pdfAnnotations.ArrayList) {}
{
// Chris' code
var annotsArray = pageDict.GetAsArray(PdfName.ANNOTS);
foreach(var annotation in annotsArray.ArrayList) { }
// My pageDict.Get() and Chris's pageDict.GetAsArray() methods both
// return null because there is no ANNOTS key present in pageDict.
问题
为什么是空值?带有清晰可见/可点击链接的 PDF 文档如何没有注释集合?文件结构中是否还有其他PdfObject
代表超链接/URI 的子类型?
谢谢