我们使用PDFNet库来提取 PDF 文件的内容。我们需要做的一件事是提取 PDF 中的 URL。不幸的是,当您浏览文件中的元素时,您会得到一个片段的 URL,而且并不总是清楚哪个片段与哪个片段搭配。
从 PDFNet 获取完整 URL 的最佳方法是什么?
链接作为注释存储在页面上。您可以执行类似以下代码的操作来从注释中获取 URI。try/catch 块在那里是因为如果缺少任何值,它们仍然返回一个 Obj 对象,但是你不能在它上面调用任何方法而不抛出它。
另外,请注意,并非所有看起来像链接的东西都是一样的。我们从同一个 Word 文件创建了两个 PDF。我们创建的第一个是打印到 PDF。我们在 Acrobat 中创建的第二个。
这两个文件中的链接都可以在 Acrobat Reader 中正常工作,但只有第二个文件具有 PDFNet 可以看到的注释。
Page page = doc.GetPage(1);
for (int i = 1; j < page.GetNumAnnots(); j++) {
Annot annot = page.GetAnnot(i);
if (!annot.IsValid())
continue;
var sdf = annot.GetSDFObj();
string uri = ParseURI(sdf);
Console.WriteLine(uri);
}
private string ParseURI(pdftron.SDF.Obj obj) {
try {
if (obj.IsDict()) {
var aDictionary = obj.Find("A").Value();
var uri = aDictionary.Find("URI").Value();
return uri.GetAsPDFText();
}
} catch (Exception ) {
return null;
}
return null;
}