C# 添加、修改和删除PDF书签
C# 添加、修改和删除PDF书签
有时候我们在阅读PDF文档时会遇到这样一种情况:PDF文档页数比较多,但是又没有书签,所以我们不能根据书签快速了解文档所讲解的内容,也不能点击书签快速跳转到相应的位置,而只能一页一页的翻阅,非常苦恼。相信开发人员在开发和PDF有关的应用程序时,也会有这样的功能需求,因此在这篇文章中我就介绍一下如何使用编程的方式(C#)和Spire.PDF组件给PDF文档添加书签(包括添加书签到现有文档和添加子书签),以及修改和删除现有PDF文档中的指定书签。
Spire.PDF组件概述
Spire.PDF是一个专业的PDF组件,用于在.NET应用程序中创建,编辑,处理和阅读PDF文档。支持丰富的PDF文档处理操作,如PDF文档合并/拆分、转换(如HTML转PDF,PDF转图片等)、打印(包括静默打印)、压缩、添加/修改/删除书签、添加注释、安全设置(包括数字签名)、创建与填充域、图片插入与提取、文本提取与高亮等。它不依赖Adobe Acrobat,因此运行环境无需安装Adobe Reader或其他类似组件。 该组件分为商业版和免费版(不是试用版)两种,一般个人使用或者操作的PDF文档不超过10页时,可以使用免费版。
关于它的安装,有很多种渠道,包括官网以及开发者最喜欢和常用的NuGet方式。在Visual Studio的 NuGet Package Manager Console中输入以下PowerShell命令回车,组件的dll就会自动地引用到项目中:
PM> Install-Package Spire.PDF
添加、修改和删除PDF书签的实现
一、添加书签
1.1 添加书签
在Spire.PDF中,每个PDF文档都有一个书签列表(PdfBookmarkCollection)。我们可以通过PdfDocument对象的Bookmarks属性来获取该列表,然后通过Add () 方法将书签添加到列表中。
//新建PDF文档 PdfDocument pdf = new PdfDocument(); //添加页面 PdfPageBase page = pdf.Pages.Add(); //添加书签
PdfBookmark bookmark = pdf.Bookmarks.Add("第一页"); //设置书签所指向的页面和位置,(0,0)表示页面的开始位置 bookmark.Destination = new PdfDestination(page);
bookmark.Destination.Location = new PointF(, ); //设置书签的文本格式和颜色 bookmark.DisplayStyle = PdfTextStyle.Bold;
bookmark.Color = Color.Black; //保存文档 pdf.SaveToFile("Bookmark2.pdf");

1.2 添加子书签
添加子书签和添加普通书签的方式基本一样,不同的是普通书签是直接添加到文档的书签列表里,而子书签则是添加到父书签的列表里。
//新建PDF文档
PdfDocument pdf = new PdfDocument();
//添加页面
PdfPageBase page = pdf.Pages.Add();
//添加书签
PdfBookmark bookmark = pdf.Bookmarks.Add("第一章 热传导");
//设置书签指向的页面和位置
bookmark.Destination = new PdfDestination(page);
bookmark.Destination.Location = new PointF(, );
//设置书签的文本格式和颜色
bookmark.DisplayStyle = PdfTextStyle.Bold;
bookmark.Color = Color.SeaGreen;
//添加子书签
PdfBookmark childBookmark = bookmark.Insert(, "1.1 热传导基本知识");
//设置子书签指向的页面和位置
childBookmark.Destination = new PdfDestination(page);
childBookmark.Destination.Location = new PointF(, );
//设置子书签的文本格式和颜色
childBookmark.DisplayStyle = PdfTextStyle.Regular;
childBookmark.Color = Color.Black;
//保存文档
pdf.SaveToFile("ChildBookmark.pdf");

1.3 添加书签到现有文档
除了在新建的PDF文档里添加书签,我们还可以给现有的PDF文档添加书签。加载PDF文档的方法除LoadFromFile以外,还有LoadFromStream (从流加载),LoadFromHTML(从HTML加载)等,可根据自己的需求选择相应的加载方式。
//加载文档 PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("示例.pdf"); for (int i = ; i < pdf.Pages.Count; i++)
{
//添加书签 PdfBookmark bookmark = pdf.Bookmarks.Add(string.Format("第{0}章", i+)); //设置书签指向的页面和位置 bookmark.Destination = new PdfDestination(pdf.Pages[i]);
bookmark.Destination.Location = new PointF(, ); //设置书签的文本格式和颜色 bookmark.DisplayStyle = PdfTextStyle.Bold;
bookmark.Color = Color.Black;
} //保存文档 pdf.SaveToFile("Bookmark2.pdf");

2. 修改书签
Spire.PDF支持多种书签修改方式,例如修改现有书签的内容,插入新书签到现有书签列表,插入子书签到现有书签等。这里我选取修改书签内容和插入新书签到现有书签列表进行介绍。
2.1 修改现有书签内容
//加载文档 PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Bookmark2.pdf"); //获取书签列表 PdfBookmarkCollection bookmarks = pdf.Bookmarks; //获取第一个书签 PdfBookmark bookmark = bookmarks[]; //修改书签指向的页面 bookmark.Destination = new PdfDestination(document.Pages[]); //修改书签的文本格式和颜色 bookmark.DisplayStyle = PdfTextStyle.Bold;
bookmark.Color = Color.Green; //修改书签的title bookmark.Title = "修改"; //保存文档 pdf.SaveToFile("ModifyBookmark.pdf");

2.2 插入新书签到现有书签列表
//加载文档 PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Bookmark2.pdf"); //插入新书签到指定位置(此处插入的是第三个书签的位置) PdfBookmark bookmark = pdf.Bookmarks.Insert(, "新增第三章"); //设置书签所指向的页面和位置 bookmark.Destination = new PdfDestination(document.Pages[]);
bookmark.Destination.Location = new PointF(, ); //保存文档 pdf.SaveToFile("InsertBookmark.pdf");

3. 删除书签
删除书签时,可以使用书签的序号,也可以使用书签的名称。这里我使用的是序号的方式。
//加载文档 PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Bookmark2.pdf"); //获取书签列表 PdfBookmarkCollection bookmarks = document.Bookmarks; //删除第一个书签 bookmarks.RemoveAt(); //保存文档 pdf.SaveToFile("DeleteBookmark.pdf");

以上博主只总结了部分操作PDF书签的功能,如果需要详细了解其他的功能,请查阅:http://e-iceblue.cn/Introduce/Spire-PDF-NET.html。如有任何疑问,欢迎给博主留言。欢迎转载,转载时请注明出处!
C# 添加、修改和删除PDF书签的更多相关文章
- JAVA 添加、修改和删除PDF书签
当阅读篇幅较长的PDF文档时,为方便我们再次阅读时快速定位到上一次的阅读位置,可以插入一个书签进行标记:此外,对于文档中已有的书签,我们也可以根据需要进行修改或者删除等操作.本篇文章将通过Java编程 ...
- Entity Framework Code First添加修改及删除单独实体
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- Entity Framework Code First添加修改及删除外键关联实体
1.添加外键关联实体 1>.添加新的Province及City实体 using (var ctx = new PortalContext()) { var city1 = new City { ...
- DNS添加/修改/查询/删除A记录
#查询DNS可用类 Get-WmiObject -Namespace root\MicrosoftDNS -List #查询所有资源记录 $mydns = [WMIClass]"ROOT\M ...
- C# 添加、获取及删除PDF附件
C# 添加.获取及删除PDF附件 前言 附件在PDF文档中很常见,这些附件可以是PDF或其他类型的文件.在PDF中,附件有两种存在方式,一种是普通的文件附件(document-level file a ...
- MVC5 网站开发之八 栏目功能 添加、修改和删除
本次实现栏目的浏览.添加.修改和删除. 栏目一共有三种类型. 常规栏目-可以添加子栏目,也可以添加内容模型.当不选择内容模型时,不能添加内容. 单页栏目-栏目只有一个页面,可以设置视图. 链接栏目-栏 ...
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- javascript里面的数组,json对象,动态添加,修改,删除示例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Response、Request、QueryString,repeater添加,修改,删除数据
内置对象: Response对象:响应请求,Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应.Response.Write("<script>a ...
随机推荐
- LANMP一键安装包 版本服务任你选 可安装单一服务
介绍与使用 更多内容请到 乌龟运维 wuguiyunwei.com 请保证在系统原有yum源文件存在的情况下运行此脚本 以下以centos7.3为例: 下面以安装LNMP为例: ? 1 wget ht ...
- Step by Step 用Azure Automation 来开虚机(ARM)
使用Azure Automation来自动化处理各种重复的耗时的云管理任务从而帮助云运维人员提升效率,帮助降低运营成本. 具体相关的介绍以及怎样利用Azure Automation来完成定期开关虚拟机 ...
- javascript痛点之四this的指向问题
先看以下例子 1.我们直接调用this看看指向的是谁 alert(this);//指向window 2.在函数中直接调用看看指向的是谁 function fn(){ alert(this); } fn ...
- [0] Lc.exe 已退出,代码 -1
可能的原因是:在你的项目中引用了第三方组件,并且这个第三方组件是个商业组件,他在组件的主使用类定义了LicenseProvider(typeof(LicFileLicenseProvider))这个A ...
- easyUI的简单了解
首先简单的介绍一下jQuery EasyUI,它是一组基于jQuery的UI插件集合体,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编写 ...
- ecshop和jQuery冲突
这个问题看ecshop的论坛里有很多帖子,解决方案就好几种,但是有几个标注完美解决方案的需要更改很多文件,对于我们这种初学者出现了问题的话是不知道怎么调试的. 找到一个很简单的解决方案,论坛里说只能解 ...
- 开源框架GreenDao的操作
1.为什么需要GreenDao?Google原生API不方便 @1手动组拼SQL语句 @2需要自己写操作数据库代码 @3不能把数据库中的数据映射成对象 @4没有实现关联查询 2.GreenDao是什么 ...
- 1.如何安装maven
[确认]在CMD命令行中输入echo %JAVA_HOME%,查看JAVA_HOME是否配置.在CMD命令行中输入java -v,查看jdk是否正确安装. [下载]从http://maven.ap ...
- container_of 的用法
1.问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structu ...
- JS初步学习
[使用JS的三种方式] 1.HTML标签中内嵌JS(不提倡使用): <button onclick="javascript:alert('小碧池!你真点啊!')">有本 ...