使用 iTextSharp 在 VB.NET 中阅读 PDF 书签
Reading PDF Bookmarks in VB.NET using iTextSharp
我正在制作一个扫描 PDF 文件并在 PDF 书签和正文中搜索文本的工具。我正在使用 Visual Studio 2008 和 VB.NET 以及 iTextSharp。
如何从现有的 PDF 文件加载书签列表?
这取决于你在说"bookmarks"时所理解的内容。
您想要大纲(书签面板中可见的条目):
CreateOnlineTree 示例向您展示了如何使用 SimpleBookmark
class 创建包含完整大纲树的 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();
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
对象也可以用来以编程方式一一检查不同的书签元素(这在官方文档中都有解释)。
您想要指定的目的地(您可以 link 按名称访问文档中的特定位置):
现在假设您要说命名目的地,那么您需要 SimpleNamedDestination
class,如 LinkActions 示例所示:
Java:
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 上下文中说书签时,通常是指轮廓)。
如果有人仍在搜索 vb.net 解决方案,试图简化,我有大量使用 reportbuilder 创建的 pdf,并且使用 documentmap 我会自动添加书签 "Title"。因此,使用 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")
对于搜索起点以了解其工作原理的人来说,这是一个非常简单的小帮助。
我正在制作一个扫描 PDF 文件并在 PDF 书签和正文中搜索文本的工具。我正在使用 Visual Studio 2008 和 VB.NET 以及 iTextSharp。
如何从现有的 PDF 文件加载书签列表?
这取决于你在说"bookmarks"时所理解的内容。
您想要大纲(书签面板中可见的条目):
CreateOnlineTree 示例向您展示了如何使用 SimpleBookmark
class 创建包含完整大纲树的 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();
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
对象也可以用来以编程方式一一检查不同的书签元素(这在官方文档中都有解释)。
您想要指定的目的地(您可以 link 按名称访问文档中的特定位置):
现在假设您要说命名目的地,那么您需要 SimpleNamedDestination
class,如 LinkActions 示例所示:
Java:
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 上下文中说书签时,通常是指轮廓)。
如果有人仍在搜索 vb.net 解决方案,试图简化,我有大量使用 reportbuilder 创建的 pdf,并且使用 documentmap 我会自动添加书签 "Title"。因此,使用 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")
对于搜索起点以了解其工作原理的人来说,这是一个非常简单的小帮助。