iTextSharp - PDF 书签未指向页面

iTextSharp - PDF Bookmark not pointing to a page

我构建了一个树视图来显示给定 PDF 文档的书签。

我使用 iTextSharp 在列表中获取书签 object 并使用 Title 值显示在树视图上,没问题。

当我希望树视图节点引用 PDF 文档中的页码时出现问题。

一些 PDF 文档具有标题、页面和操作的值,例如:
标题: "Title Page",
: "1 XYZ -3 845 1.0",
操作:"GoTo"

不过,其他的都是这种格式:
标题: "Title Page",
命名: "G1.1009819",
操作: "GoTo"

我不知道如何处理 "Named" 值。我已经尝试遍历文档中的所有 link 并将值与 link 的目标值进行比较,但没有成功。

有人知道这个"Named"属性代表什么吗?

这是一个命名目的地,请参阅 the keyword list 了解一些示例。这是在文档中标记目的地的一种非常常用的方法。

你想用命名的目的地做什么?

是否要consolidateNamedDestinations()使它们不再命名为目的地,而是links 到文档中的特定位置。

或者您想创建一个 link 到指定目的地? (这可能是更多的工作。我认为手头没有例子。)

如果您浏览 the examples,您会发现 LinkActions 我们使用 SimpleNamedDestination 对象检索命名目的地的方式几乎与使用 SimpleBookmark class.

此代码片段以 XML 文件的形式向我们提供了书签:

public void createXml(String src, String dest) throws IOException {
    PdfReader reader = new PdfReader(src);
    HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
    SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
            "ISO8859-1", true);
    reader.close();
}

结果见destinations.xml

代码更简单,因为结构不是嵌套的:每个名称对应一个目的地。