【发布时间】:2012-07-09 03:39:38
【问题描述】:
场景:
我有一个应用程序使用 iTextSharp 搜索 PDF 文件中的超链接。
PDF 中的超链接是文件结构中“注释对象”的子类型,因此我的代码本质上是 (1) 读取文件,(2) 循环浏览页面,(3) 获取页面的注释集合,以及 (4) 提取页面的超链接注释。
问题
有时表示给定页面的“pdf 字典”对象没有注释集合(没有/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 文档如何没有注释集合?文件结构中是否还有其他代表超链接/URI 的PdfObject 子类型?
谢谢
【问题讨论】:
-
您能否提供一个带有可点击链接的 1 页 PDF 示例,其中 PDF 源代码中没有
/ANNOTS键? -
很遗憾没有。这些是我无法与公众共享的工作文件,即使可以,几乎所有文件共享网站都被阻止。我知道,这让这种情况变得艰难。
标签: c# pdf hyperlink annotations itextsharp