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

使用iTextSharp在VB.NET中读取PDF书签,vb.net,pdf,itextsharp,itext,Vb.net,Pdf,Itextsharp,Itext,我正在制作一个工具,可以扫描PDF文件,搜索PDF书签中的文本和正文。我正在使用Visual Studio 2008和VB.NET以及iTextSharp 如何从现有PDF文件中加载书签列表?这取决于你说“书签”时理解的内容 您需要大纲(书签面板中可见的条目): PdfReader reader = new PdfReader(src); List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(rea

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


如何从现有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();
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();
    }              
} 
PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();
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();
    }
}
这些示例演示了如何使用
SimpleBookmark
类创建包含完整大纲树的XML文件(在PDF术语中,书签称为大纲)

Java:

PdfReader reader = new PdfReader(src);
List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true);
reader.close();
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();
    }              
} 
PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();
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();
    }
}
列表
对象还可以用于以编程方式逐个检查不同的书签元素(这在官方文档中都有解释)

您需要指定的目的地(您可以通过名称链接到文档中的特定位置):

PdfReader reader = new PdfReader(src);
List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true);
reader.close();
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();
    }              
} 
PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();
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();
    }
}
现在假设您想说命名目的地,那么您需要
SimpleNamedDestination
类,如示例所示:

Java:

PdfReader reader = new PdfReader(src);
List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true);
reader.close();
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();
    }              
} 
PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();
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();
    }
}
PdfReader阅读器=新的PdfReader(src);
HashMap map=SimpleNamedDestination.getNamedDestination(读取器,false);
SimpleNamedDestination.exportToXML(映射,新文件输出流(dest),
“ISO8859-1”,正确);
reader.close();
C#:

PdfReader reader = new PdfReader(src);
List<HashMap<String, Object>> list = SimpleBookmark.getBookmark(reader);
SimpleBookmark.exportToXML(list,
        new FileOutputStream(dest), "ISO8859-1", true);
reader.close();
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();
    }              
} 
PdfReader reader = new PdfReader(src);
HashMap<String,String> map = SimpleNamedDestination.getNamedDestination(reader, false);
SimpleNamedDestination.exportToXML(map, new FileOutputStream(dest),
        "ISO8859-1", true);
reader.close();
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();
    }
}
PdfReader阅读器=新的PdfReader(src);
字典映射=SimpleNamedDestination
.GetNamedDestination(读取器,false);
使用(MemoryStream ms=new MemoryStream()){
SimpleNamedDestination.ExportToXML(map,ms,“ISO8859-1”,真);
ms.Position=0;
使用(StreamReader sr=新StreamReader(ms)){
返回sr.ReadToEnd();
}
}
map
对象还可以用于以编程方式逐个检查不同的命名目的地。请注意检索命名目的地时使用的
布尔值
参数。可以使用PDF名称对象作为名称或使用PDF字符串对象来存储命名目的地。
Boolean
参数表示您想要前者(
true
=存储为PDF名称对象)还是后者(
false
=存储为PDF字符串对象)类型的命名目的地


命名目的地是PDF文件中的预定义目标,可以通过其名称找到。虽然官方名称为“目的地”,但也有人将其称为书签(但当我们在PDF上下文中称为书签时,我们通常希望参考大纲)。

如果有人仍在搜索vb.net解决方案,试图简化,我用reportbuilder和documentmap创建了大量pdf文件,并自动添加了书签“标题”。因此,使用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")

对于搜索起点的人来说,这是一个非常简单的小帮助,可以帮助他们理解它是如何工作的。

到目前为止,我已经接触到使用PDFReader类,但不知道如何枚举书签。嗯?为什么要投否决票?如果投否决票的人解释我的答案有什么问题,这会有所帮助。我给出了Java/C#示例,说明如何检索大纲和命名目的地,这两个概念可以解释为“书签”。还有什么可以期待的呢?好吧,-1让我对答案做了一点改进,例如,解释了提取命名目的地时的
布尔值
参数是关于什么的。我所说的书签是指大纲,所以答案的第一部分为我指明了正确的方向。但是对我来说,转换成XML是没有用的,因为我只需要执行搜索,所以我将使用“list”对象通过书签进行枚举。由于iText文档分为类参考和一本书(我没有),所以我需要一个起点。干杯顺便说一句,我没有投反对票。XML将让您了解
列表中的元素。此列表应解释为一棵树,其中每个条目的值可以是一个叶(例如标题)或一个分支(例如新的“子”系列)。也许否决答案的人就是否决问题的人……否决好答案可能是无意中发生的(很少发生),因为一时的分心,不小心点击了错误的箭头;或者,选民们刚刚度过了糟糕的一天(也很少见)。。。有一次我无意中否决了一个我确信我本打算投赞成票的答案。几天后通过检查我自己的投票记录发现了它。当然,我重新投了那一票,并把它改为向上一票。