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

2023-12-04

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

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


这取决于您所说的“书签”时的理解。

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

The 创建在线树示例向您展示了如何使用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();

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();
    }              
} 

The list对象还可以用于以编程方式一一检查不同的书签元素(这在官方文档中都有解释)。

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

现在假设您想说的是命名目的地,那么您需要SimpleNamedDestination类如所示链接动作例子:

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();
    }
}

The map对象还可以用于以编程方式一一检查不同的命名目的地。请注意Boolean检索指定目的地时使用的参数。可以使用 PDF 名称对象作为名称或使用 PDF 字符串对象来存储命名目标。这Boolean参数表示是否想要前者(true= 存储为 PDF 名称对象)或后者(false= 存储为 PDF 字符串对象)命名目的地的类型。

命名目标是 PDF 文件中的预定义目标,可以通过其名称找到它们。虽然正式名称被命名为“目的地”,但有些人也将它们称为“书签”(但当我们在 PDF 上下文中说“书签”时,我们通常指的是大纲)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 iTextSharp 在 VB.NET 中读取 PDF 书签 的相关文章

  • 隐藏嵌入的 pdf 周围的工具栏?

    虽然我认为答案可能在这另一个问题 https stackoverflow com questions 770949 how to disable the default toolbar of pdf page关于pdf规范的回答 是否可以不
  • 将 .NET P/Invoke 代码组织为 Win32 API 的最佳实践

    我正在 NET 中重构一个大型且复杂的代码库 该代码库大量使用 P Invoke to Win32 API 该项目的结构不是最好的 我发现 DllImport 语句遍布各处 经常为同一函数重复 并且还以多种方式声明 导入指令和方法有时声明为
  • TCPDF UTF-8 符号未显示

    我使用最新的 TCPDF 版本 5 9 但在编码方面遇到一些奇怪的问题 我需要立陶宛语语言符号 例如 但只能得到其中的一小部分 其他的还是这样 所以我该怎么做 我使用默认的 times 字体 它带有 TCPDF 下载 任何帮助 将不胜感激
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • C# 的最佳替代“错误继续下一步”是什么?

    如果我为 C 代码放置空的 catch 块 它是否与 VB NET 的 On Error Resume Next 语句等效 try C code catch exception 我问这个问题的原因是因为我必须将 VB NET 代码转换为 C
  • SELECT 语句会受到 SQL 注入攻击吗?

    实际上有2个问题 我知道我必须尽可能多地使用存储过程 但我想知道以下内容 A 我可以从 SELECT 语句 例如 Select from MyTable 获得 SQL 注入攻击吗 B 另外 当我在 ASP NET 中使用 SQLDataSo
  • 使一个对象只能被同一程序集中的另一个对象访问?

    每个业务对象都有一个包含 sql 调用的匹配对象 我想限制这些 sql 对象 使其只能由匹配的业务对象使用 如何才能实现这一目标 Update 格雷格提出了关于可测试性的观点 由于 SqlObjects 将包含非常特定于业务流程的 sql
  • 循环访问 VB.NET 中的控件

    我正在创建一个国际象棋程序 它由六十四个黑白背景颜色交替的图框组成 我已经给它们命名了pba1 pba2 pbb1 pbb2 pbc1等等 现在 我只想循环遍历黑色的 例如 我只想循环遍历pba1 pbb2 pbc3等 如何在 VB NET
  • USB 上的 Autorun.inf 可以让它运行 pdf 吗?

    我在网上做了一些研究 我想我只是在寻找构象 由于 Microsoft 如何在 Vista 及更高版本中对自动运行设置安全性 从 USB 自动运行不再起作用 正确的 看起来它仍然会显示运行 exe 的选项 但由于某些奇怪的原因我无法让它运行
  • 在 String.Format 中插入格式化字符?

    我用谷歌搜索了这个 但 VB Net 2008 似乎不允许在 String Format 中插入格式化字符 例如 t r n BAD MessageBox Show String Format 0 tab 1 Foo Bar BAD Mes
  • 如何在vb.net中实现事务方式?

    我使用 VB net 200 开发一个连接到 MS Access 数据库的应用程序 我使用 TableAdapter 和 Dataset 连接到 Access DB 文件 我需要实现一个简单的事务方法 提交 回滚 来保存到数据库 有没有一种
  • Vb中读取USB存储设备的序列号

    是否可以使用VB读取USB驱动器的序列号 这将为您提供 net 中驱动器的信息 包括 USB 设备 只需导入这些 导入脚本 导入系统 IO Private Class USBsn Private Sub Button1 Click ByVa
  • 在 VB.NET 中 a = b = 5 - 不可能吗?

    VB NET 中可以这样做吗a b 5 我知道 也是比较运算符 我的意思是做not结果 例如 如果 b 2 a false b 2 然而 在下面的情况下该怎么做呢 不方便在我的代码中引起了这个问题 一些对象a b z由方法中的 ref 传递
  • 如何在 chromedriver 2.15 中打开 pdf 而无需下载

    我最近升级到 Chromedriver 2 15 现在 当我单击 pdf 文件的链接时 它会自动下载 而不是像以前那样显示在新选项卡中 a target blank href my pdf file pdf My PDF File a 有没
  • 最小的有效 PDF 是多少?

    出于简单的好奇心 看到了最小的 GIF http probablyprogramming com 2009 03 15 the tiniest gif ever 最小的有效 PDF 文件是多少 这是一个有趣的问题 按照书本 你可以从以下开始
  • Visual Basic - 未将对象引用设置为对象的实例

    我在 VB Net 中收到以下错误 你调用的对象是空的 它在 For 循环末尾突出显示 Next 任何帮助都会很棒 Imports System IO Public Class LoginForm Dim Username As Strin
  • 获取 FTP 服务器上的文件大小并将其放在标签上

    我正在尝试获取托管在FTP服务器并将其放入Label而 BackgroundWorker 在后台工作 我在用着 Try 来获取该值 但是该值在第一次尝试时被捕获 下载后 如果我按尝试再次获取它 那么它就可以工作 Note 第一次尝试时进度条
  • .net 的自动完成文本框,支持分隔符

    我正在开发一个应用程序 它需要一个带有多个单词的自动完成 建议 下拉 的文本框 由空格等分隔符分隔 就像 StackOverflow 中的标签文本框一样 例如 我开始输入 app 它应该显示建议列表中以以下内容开头的所有单词app 当我输入

随机推荐

  • EC2 实例加载我的用户数据脚本但不运行它

    Code usr bin env python import boto ec2 conn ec2 boto ec2 connect to region us east 1 access keys are environment vars m
  • java getRuntime().exec 需要 UAC 的 exe

    所以我们有一个作为 Windows 服务运行的 java 进程 它需要执行一个命令Runtime getRuntime exec command 它执行的命令需要UAC 这是在 Windows Server 2008 上 听起来您无法为单个
  • Android模拟器运行简单项目时出错

    当我将 Android 模拟器配置为版本 4 4 2 时 模拟器只是挂起并且无法通过 Android 徽标 当我检查 Eclipse 中的控制台时 出现以下错误 错误 factory client recv 中未知的相机工厂查询名称 and
  • 在 html 页面的 iframe 内显示警告框

    有一个简单的 HTML 页面 名为 abc html 现在 abc html 有一个名为 单击我 的按钮 此页面 abc html 也有一个 iframe 其 id 为 myframe 现在我想要的是 当单击 单击我 按钮时 名为 myfr
  • 如何使用CLLocationManager监控20多个区域

    我想要使 用以下方式监控大约 2000 个区域 仅限入口 CLLocationManager 我有一个函数可以找到 20 个最近的商店 Store是一个继承自的类NSObject并有一个CLLocationCoordinate2D属性名为g
  • 如何将表单数据作为 JSON 发布?

    我正在尝试为我们正在进行的一个小组项目构建一个注册站点 但不知道如何将表单数据作为 json 发送 我尝试了很多谷歌搜索并更改了代码 但似乎没有任何效果 我遇到的问题是 当我按下提交按钮时 我从 API 收到如下错误 输入无效 我认为原因是
  • 什么时候不应该使用 Java 中的 static 关键字?

    什么时候在 Java 方法签名上使用 static 关键字被认为是不好的做法 如果一个方法根据某些参数执行一个函数 并且不需要访问非静态的字段 那么您不是总是希望这些类型的方法是静态的吗 在大型 Java 应用程序中您将遇到的两个最大的弊端
  • 在 MVC / ASP.NET 中发布包含列表的模型

    我知道怎么做postASP NET 中表单的对象列表 但假设我想要post同时还有其他一些值 有没有办法有一个表格 像这样
  • 如何在线程内接收 WM_POWERBROADCAST?

    我已经绞尽脑汁一天多了 浏览了大量的资源 试图弄清楚如何接收WM POWERBROADCAST来自线程内的 Windows 消息 目前 我正在使用AllocateHWnd WndMethod 独立组件内部 当我在标准 VCL Forms 应
  • 在 UITableView 中,“visibleCells”的委托是什么?

    当单元格进出设备屏幕时 我希望我的 viewController 确切地知道什么进来了 什么出去了 有没有办法做到这一点 不存在仅适用于 可见单元格 的委托方法 当单元格离开屏幕时 不会调用任何内容 当细胞变得可见时 实际上什么也没有 有的
  • Python:使用()调用方法和不使用()调用方法有什么区别?

    这一定是非常基本和明显的东西 因为我无法通过谷歌或在这里找到答案 当我调用方法时 Python 中的括号有什么区别 带有 pygame 和括号的示例代码 import pygame import sys pygame init screen
  • setInterval 在 Ajax 请求后停止

    我正在使用 Asp net MVC 我希望我的部分视图按一定时间间隔刷新 直到我发出不相关的 Ajax 请求 然后它才会停止 这里有一些简化的片段来说明问题 在 AjaxRefresh js 中 function ajaxRefresh v
  • 如何从 UIImage 中 NSLog 像素 RGB?

    我只想 1 复制像素数据 2 迭代并修改每个像素 仅向我展示如何将 ARGB 值 NSLog 为 255 3 从新的像素数据创建 UIImage 如果有人能告诉我如何将像素的 RGBA 值 NSLog 为 255 我就可以弄清楚血淋淋的细节
  • 从路径读取事件日志文件

    我的问题与这个非常相似如何以编程方式打开事件日志 除了我正在记录任何东西 我需要从多台未连接的机器创建日志条目数据库 我收到 evtx 文件 然后尝试处理它们 现在我正在从导出的 xml 文件中执行此操作 但我想跳过到 xml 转换部分 我
  • ng-src 不适用于 youtube 嵌入视频

    我对 YouTube 嵌入代码有一个小问题 在我的控制器中 scope emedUrl https www youtube com embed
  • Python 中的多态性

    class File object def init self filename if os path isfile filename self filename filename self file open filename rb se
  • 手动响应鼠标悬停事件

    有没有办法触发 React 的 mouseover 和 mouseenter 事件 可以开火 ReactDOM findDOMNode someNode focus ReactDOM findDOMNode someNode click 有
  • PHP 找不到保存处理程序内存缓存

    我正在为这个问题绞尽脑汁 它应该很简单 但似乎找不到解决方案 所以希望你们中的一个人可以帮助我 我正在尝试使用 php 的 memcache 扩展来存储会话 我正在运行 MAMP 并已正确安装了扩展 我认为 它在我执行 phpinfo 时显
  • JPA中NamedQuery注解有什么好处?

    刚才我写了一个NamedQuery对于 JPA 实体 我们对此感到非常高兴 这里是 NamedQuery name Panties RED PANTIES QRY query SELECT p FROM Panties p WHERE p
  • 使用 iTextSharp 在 VB.NET 中读取 PDF 书签

    我正在制作一个工具 可以扫描 PDF 文件并搜索 PDF 书签和正文中的文本 我正在使用带有 VB NET 和 iTextSharp 的 Visual Studio 2008 如何从现有 PDF 文件加载书签列表 这取决于您所说的 书签 时