目录前言

Free Spire.PDF for Java库概述和安装

给PDF文档添加书签

修改现有书签

设置PDF文档打开时展开或折叠书签

读取书签标题

从PDF文档中删除书签

前言

书签在一些PDF教程和篇幅较长的PDF文档中比较常见,它可以帮我们快速了解一篇文章的内容结构,以及快速定位到文中的某一个位置。这篇文章将介绍如何使用免费PDF组件- Free Spire.PDF for Java在Java应用程序中操作PDF书签。

Free Spire.PDF for Java库概述和安装

Free Spire.PDF for Java 是一个免费的 Java PDF类库。该类库支持在 Java 应用程序中生成 PDF 文档和操作现有 PDF 文档,并且运行环境无需安装 Adobe Acrobat。

Free Spire.PDF for Java 包含一系列接口,支持对PDF 文档安全性设置,提取文本和图片,合并和拆分 PDF,画文本、图片、形状、条形码到 PDF,创建和填充表单,添加和删除层,重叠 PDF 页面,添加文本/图片水印,添加、更新、删除 PDF 书签,添加表格,压缩 PDF 文档等。此外,Spire.PDF for Java 还支持将 PDF 文档转换为 Word、HTML、图片、SVG 和 PDF/A 格式,以及将XPS和PDF互转。

如果你的项目是maven工程的话,在pom.xml文件中添加如下依赖,即可以给自己的应用程序添加Free Spire.PDF for Java库支持。

com.e-iceblue

e-iceblue

http://repo.e-iceblue.com/nexus/content/groups/public/

e-iceblue

spire.pdf.free

2.0.0

e-iceblue

spire.pdf.common.free

2.0.0

也可以通过官网下载地址下载最新的Free Spire.PDF for Java的jar文件。

给PDF文档添加书签

以下示例展示了如何创建一个PDF文档,添加书签并设置书签的格式://创建PDF

PdfDocument pdf = new PdfDocument();

//添加一页

PdfPageBase page = pdf.getPages().add();

float x = 0;

float y = 50;

//在页面上绘制文本内容

PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,14),true);

PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.BLACK));

page.getCanvas().drawString("第一章 绪论",font, brush, new Point2D.Float(x, y));

//添加书签

PdfBookmark bookmark = pdf.getBookmarks().add("第一章 绪论");

//设置书签的文本格式为加粗

bookmark.setDisplayStyle(PdfTextStyle.Bold);

//设置书签的字体颜色

bookmark.setColor(new PdfRGBColor(new Color(46,139,87)));//SeaGreen

//设置书签指向的页面

bookmark.setDestination(new PdfDestination(page));

//设置书签指向的页面具体位置

bookmark.getDestination().setLocation(new Point2D.Float(x, y));

//保存

pdf.saveToFile("AddBookmark.pdf");

以下例子展示了如何创建一个PDF文档,并给它添加多级(一级和二级)书签://创建PDF

PdfDocument pdf = new PdfDocument();

//添加一页

PdfPageBase page = pdf.getPages().add();

float x = 0;

float y = 50;

//在页面上绘制文字

PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,14),true);

PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.BLACK));

page.getCanvas().drawString("第一章 绪论",font, brush, new Point2D.Float(x, y));

page.getCanvas().drawString("1.1 传热学的研究内容及其在科学技术和工程中的应用", font, brush, new Point2D.Float(x, y + 50));

//添加书签

PdfBookmark bookmark = pdf.getBookmarks().add("第一章 绪论");

bookmark.setDisplayStyle(PdfTextStyle.Bold);

bookmark.setColor(new PdfRGBColor(new Color(46,139,87)));

bookmark.setDestination(new PdfDestination(page));

bookmark.getDestination().setLocation(new Point2D.Float(x, y));

//添加第二级书签

PdfBookmark childBookmark = bookmark.add( "1.1 传热学的研究内容及其在科学技术和工程中的应用");

childBookmark.setDisplayStyle(PdfTextStyle.Italic);

childBookmark.setColor(new PdfRGBColor(Color.BLACK));

childBookmark.setDestination(new PdfDestination(page));

childBookmark.getDestination().setLocation(new Point2D.Float(x, y + 50));

//保存

pdf.saveToFile("AddChildBookmark.pdf");

除了在新建PDF时添加书签,我们也可以给现有的PDF文档添加书签://加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("Sample.pdf");

//获取第一页

PdfPageBase page = pdf.getPages().get(0);

//添加书签

PdfBookmark bookmark = pdf.getBookmarks().add("明天早上数");

//设置书签的文本格式,字体颜色,指向页面和位置

bookmark.setDisplayStyle(PdfTextStyle.Bold);

bookmark.setColor(new PdfRGBColor(Color.BLACK));

bookmark.setDestination(new PdfDestination(page));

bookmark.getDestination().setLocation(new Point2D.Float(0,10));

//保存

pdf.saveToFile("AddBkmktoExistPDF.pdf");

修改书签

以下示例展示了如何修改现有书签的标题和字体颜色://加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddChildBookmark.pdf");

//获取PDF书签集合

PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();

//获取第一个书签

PdfBookmark bookmark = bookmarkCollection.get(0);

//获取该书签下的第一个子书签

PdfBookmark childBookmark = bookmark.get(0);

//修改子书签的标题

childBookmark.setTitle("第二级书签");

//修改子书签的字体颜色

childBookmark.setColor(new PdfRGBColor(Color.RED));

//保存

pdf.saveToFile("ModifyBookmark.pdf");

设置打开PDF文档时展开或折叠书签

PDF书签默认为打开模式,但我们可以设置将PDF书签折叠起来://加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddChildBookmark.pdf");

//false为折叠,true为展开

pdf.getViewerPreferences().setBookMarkExpandOrCollapse(false);

//保存

pdf.saveToFile("CollapseBookmark.pdf");

读取书签标题

以下示例展示了如何读取PDF文档中的书签标题://加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddChildBookmark.pdf");

//获取书签的集合

PdfBookmarkCollection bookmarks = pdf.getBookmarks();

StringBuilder builder = new StringBuilder();

//调用ReadBookmarks方法读取书签标题

ReadBookmarks(bookmarks, builder);

//写入到文本文件

FileWriter fw = new FileWriter("Bookmarks.txt");

try {

fw.write(builder.toString());

fw.flush();

} catch (IOException e) {

e.printStackTrace();

}

//ReadBookmarks方法

static void ReadBookmarks(PdfBookmarkCollection bookmarks,StringBuilder builder) throws IOException {

if (bookmarks.getCount() > 0)

{

for(PdfBookmark parentBookmark : (Iterable) bookmarks)

{

builder.append(parentBookmark.getTitle()+"\r\n");

ReadBookmarks(parentBookmark,builder);

}

}

}

删除书签

以下示例删除了PDF文档中的所有书签://加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddChildBookmark.pdf");

//获取书签的集合

PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();

//删除集合中的所有书签

bookmarkCollection.clear();

//保存

pdf.saveToFile("DeleteBookmark.pdf");

除删除所有书签外,我们还可以删除指定书签。在删除指定书签时,既可以通过该书签的索引删除,也可通过该书签的标题删除。//加载PDF

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddChildBookmark.pdf");

//获取书签的集合

PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();

//从集合中删除第一个书签及其子书签

//通过书签索引删除

//bookmarkCollection.removeAt(0);

//通过书签标题删除

bookmarkCollection.remove("第一章 绪论");

//保存

pdf.saveToFile("DeleteBookmark.pdf");

java 修改pdf_Java 操作PDF书签详解 - 添加、修改、读取和删除相关推荐

  1. xml java jaxb_【Java】JAXB操作XML用法详解

    什么是JAXB? JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.在JAX-WS(Java的W ...

  2. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  3. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  4. Java集合(四) LinkedList详解

      在上篇文章Java集合(三) ArrayList详解的学习和源码分析中,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差.如果在不确定元素数量的情况时,不建议使 ...

  5. Java中大数据数组,Java基础学习笔记之数组详解

    摘要:这篇Java开发技术栏目下的"Java基础学习笔记之数组详解",介绍的技术点是"java基础学习笔记.基础学习笔记.Java基础.数组详解.学习笔记.Java&qu ...

  6. pdo mysql 绑定查询_php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 php mysql PDO 查询操作的实例详解 这篇文章主要介绍了php mysql PDO 查询操作的实例详解的相关资料,希望通过本文能帮助到大家,需 ...

  7. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

  8. Java监听mysql的binlog详解(mysql-binlog-connector)

    Java监听mysql的binlog详解(mysql-binlog-connector) 1. 需求概述 2. 技术选型 3. 方案设计 3.环境准备 3.1 查看是否开启binlog 3.2 mys ...

  9. java的String类源码详解

    java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...

最新文章

  1. ewebeditor后台拿shell
  2. Android Studio 3.0 安装注意点
  3. 当我学完Python我学了些什么
  4. 邬贺铨:区块链技术将确保物联网隐私和安全
  5. webpack初学笔记 之 小案例篇demo1
  6. assignment symbolic automaton verilog设计
  7. 【转】Mybatis/Ibatis,数据库操作的返回值
  8. Docker学习总结(59)——DockerFIile相关知识点再总结
  9. 安装 opencv ubuntu_Ubuntu18.04安装 OpenCV4.3.0
  10. LC60 Permutation Sequence
  11. ORACLE多表关联UPDATE 语句
  12. 专利查询下载的几个网站
  13. Django——jinja2配置与使用
  14. 图片上传到淘宝的操作流程——upload_img
  15. Python-进制转换
  16. 关于使用canvas时fillRect添加矩形高度问题
  17. css3中边框的4种样式
  18. 转载:Openssl生成rsa和椭圆曲线加密公钥密钥创建根ca签名https服务器证书签名...
  19. 网络基础之网络协议篇
  20. 打了平安的新股,可惜一签没中

热门文章

  1. 三、深入Javascript(1)_看智能社blue老师JS视频整理的笔记
  2. 原声js,取消事件冒泡,点击按钮,显示box,点击屏幕其他地方,box隐藏
  3. python学习笔记——tkinter模块
  4. 维控协议转换网关WTGNet-LX
  5. 使用油猴子对 Eureka 网址进行自定义修改
  6. x86 openwrt固件编译
  7. autojs 云控_autojs实现云端脚本(七)
  8. 基于DCT变换的JPEG图像压缩原理与JPEG2000编解码原理
  9. 精品科技感ppt模板,可以用作工作汇报,年终总结,需要的小伙伴直接拿走
  10. 程序猿和测试攻城狮崩溃的瞬间,这比喻太形象了,你是否已笑喷~