【发布时间】:2014-06-09 17:30:12
【问题描述】:
我有一些包含 URL 和 mailto 形式的超链接的 PDF。现在是否有任何方法或工具(可能是第 3 方)从 PDF 中提取超链接元信息,如坐标、链接类型和目标地址。非常感谢任何帮助。
我已经尝试使用 iText 和 PDFBox,但没有取得重大成功,甚至一些第三方软件也没有为我提供所需的输出。
我使用 iText 在 Java 中尝试了以下代码
PdfReader myReader = new PdfReader("pdf File Path");
PdfDictionary pageDict = myReader.getPageN(1);
PdfArray annots = pageDict.getAsArray(PdfName.ANNOTS);
System.out.println(annots);
ArrayList<String> dests = new ArrayList<String>();
if(annots != null)
{
for(int i=0; i<annots.size(); ++i)
{
PdfDictionary annotDict = annots.getAsDict(i);
PdfName subType = annotDict.getAsName(PdfName.SUBTYPE);
if (subType != null && PdfName.LINK.equals(subType))
{
PdfDictionary action = annotDict.getAsDict(PdfName.A);
if(action != null && PdfName.URI.equals(action.getAsName(PdfName.S)))
{
dests.add(action.getAsString(PdfName.URI).toString());
} // else { its an internal link }
}
}
}
System.out.println(dests);
【问题讨论】:
-
@Bobrovsky 的答案中的示例使用 Doxotic 搜索链接注释,使用 iText 或 PDFBox 搜索链接注释的设计也类似。因此,您确定文档中的那些链接确实是链接注释吗?例如。 Adobe Reader 有一个选项可以使内容中的地址可点击,就好像它们是链接注释一样,而它们不是。也许这样的功能让你相信有链接注释,而实际上没有。 (顺便说一句,您可能想提供您尝试过的代码;也许它是错误的。)
-
非常感谢 mkl 你已经完成了。实际上,我的代码运行良好,这是创建悬停链接的 Adobe 的属性。您能否提供 Adobe 的规格以创建此类属性,以便我检查它
-
Adobe Reader 只是在页面内容中搜索它认为的 URL 并使其具有交互性。您可以在首选项中打开和关闭此行为。我不知道要提供哪些规范。
-
干杯,我已经从“编辑”>“首选项”>“常规”选项中检查了它,然后取消选中“从 URL 创建链接”选项。再次感谢您的帮助。
标签: pdf hyperlink adobe itext pdf-extraction