使用iTextSharp在VB.NET中读取PDF书签

时间:2015-01-02 09:17:36

标签: vb.net pdf itextsharp itext

我正在制作一个扫描PDF文件并在PDF书签和正文中搜索文本的工具。我正在使用带有VB.NET的Visual Studio 2008和iTextSharp。

如何从现有PDF文件加载书签列表?

2 个答案:

答案 0 :(得分:4)

当你说"书签"。

时,这取决于你的理解

您需要大纲(书签面板中可见的条目):

CreateOnlineTree示例向您展示了如何使用SimpleBookmark类创建包含完整大纲树的XML文件(在PDF术语中,书签称为大纲)。

<强>爪哇:

PdfReader reader = new PdfReader(src);
List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true);
reader.close();

<强> C#:

PdfReader reader = new PdfReader(pdfIn);
var list = SimpleBookmark.GetBookmark(reader);
using (MemoryStream ms = new MemoryStream()) {
    SimpleBookmark.ExportToXML(list, ms, "ISO8859-1", true); 
    ms.Position = 0;
    using (StreamReader sr =  new StreamReader(ms)) {
        return sr.ReadToEnd();
    }              
} 

list对象也可用于以编程方式逐个检查不同的书签元素(官方文档中对此进行了解释)。

您想要指定目的地(您可以按名称链接到文档中的特定地点):

现在假设您打算说出命名目的地,那么您需要LinkActions示例中显示的SimpleNamedDestination类:

<强>爪哇:

PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();

<强> C#:

PdfReader reader = new PdfReader(src);
Dictionary<string,string> map = SimpleNamedDestination
      .GetNamedDestination(reader, false);
using (MemoryStream ms = new MemoryStream()) {
    SimpleNamedDestination.ExportToXML(map, ms, "ISO8859-1", true);
    ms.Position = 0;
    using (StreamReader sr =  new StreamReader(ms)) {
      return sr.ReadToEnd();
    }
}

map对象也可用于以编程方式逐个检查不同的命名目标。请注意检索指定目标时使用的Boolean参数。可以使用PDF名称对象作为名称或使用PDF字符串对象存储命名目标。 Boolean参数指示您是希望前者(true =存储为PDF名称对象)还是后者(false =存储为PDF字符串对象)类型的命名目标。

命名目的地是PDF文件中的预定义目标,可通过其名称找到。虽然官方名称是命名目的地,但有些人也将它们称为书签(但是当我们在PDF的背景下说书签时,我们通常想要参考大纲)。

答案 1 :(得分:1)

如果某人仍在搜索vb.net解决方案,尝试简化,我会使用reportbuilder创建大量pdf,并使用documentmap自动添加书签&#34; Title&#34;。因此,使用iTextSharp,我阅读pdf并仅提取第一个书签值:

    Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName)
    Dim list As Object
    list = SimpleBookmark.GetBookmark(oReader)
    Dim string_book As String
    string_book = list(0).item("Title")

对于搜索起点的人来说,了解其工作方式非常简单。