C# iTextSharp-PDF书签不指向页面

C# iTextSharp-PDF书签不指向页面,c#,itextsharp,C#,Itextsharp,我构建了一个树状视图来显示给定PDF文档的书签 使用iTextSharp,我在列表对象中获取书签,并使用标题值显示在树状图上,没有问题 当我希望树状视图节点引用PDF文档中的页码时,就会出现问题 某些PDF文档具有标题、页面和操作的值,例如: 标题:标题页, 页面:“1xyz-3845 1.0”, 操作:“转到” 但是,其他格式为: 标题:标题页, 命名为:“G1.1009819”, 操作:“转到” 我不知道该怎么做“命名”值。我尝试过浏览文档中的所有链接,并将其值与链接的目标值进行比较,但没有

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

使用iTextSharp,我在列表对象中获取书签,并使用标题值显示在树状图上,没有问题

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

某些PDF文档具有标题、页面和操作的值,例如:
标题:标题页,
页面:“1xyz-3845 1.0”,
操作:“转到”

但是,其他格式为:
标题:标题页,
命名为:“G1.1009819”,
操作:“转到”

我不知道该怎么做“命名”值。我尝试过浏览文档中的所有链接,并将其值与链接的目标值进行比较,但没有成功


有人知道这个“命名”属性代表什么吗?

它是一个命名目的地,请参阅以获取一些示例。在文档中标记目的地是一种非常常见的方法

您想对指定的目的地做什么

是否希望
consolidateNamedDestinations()
使它们不再是命名目的地,而是指向文档中特定位置的链接

还是要创建指向指定目的地的链接?(这可能需要更多的工作。我认为手边没有例子。)

如果浏览,您将发现
LinkActions
,其中我们使用
SimpleNamedDestination
对象检索命名目的地,几乎与使用
SimpleBookmark
类检索书签的方式相同

此代码段以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();
}
public void createXml(String src,String dest)抛出IOException{
PdfReader读取器=新PdfReader(src);
HashMap map=SimpleNamedDestination.getNamedDestination(读取器,false);
SimpleNamedDestination.exportToXML(映射,新文件输出流(dest),
“ISO8859-1”,正确);
reader.close();
}
看看结果如何


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

是否可以从指定的目的地获取页码?嗯。。。显然你没有读我的答案。我会更新它,使它更明确。任命,在第二次尝试时,它是非常有意义的!我使用了consolidateNamedDestinations()方法,它显示了页码。感谢您的帮助,非常感谢:)这当然是需要最少代码行的解决方案。使用
SimpleNamedDestination
也可以,但它需要更多的代码。无论如何,我的答案现在更完整了,这也是一件好事。