本文介绍通过Java程序来操作PDF书签,根据对书签的不同操作要求,分以下情况来介绍:

1. 添加书签(包括添加一级书签、多级子书签)

3. 删除书签(包括删除所有书签、删除子书签等)

4. 读取书签

工具使用

程序使用辅助工具:Free Spire.PDF for Java(免费版)

方法1

:可下载

jar包,解压并将lib文件夹下的jar文件导入java程序(手动导入)

方法2

: 通过创建Maven项目程序,在pom.xml中配置maven仓库路径并指定Free Spire.PDF for Java 的依赖,配置完成后,在IDEA中,点击“Import Changes”导入JAR包:

com.e-iceblue

http://repo.e-iceblue.cn/repository/maven-public/

e-iceblue

spire.pdf.free

2.6.3

(Ecllipse

的导入方法,参考这篇

)

jar导入结果如下图所示:

1.

添加书签到PDF

import com.spire.pdf.*;

import com.spire.pdf.actions.PdfGoToAction;

import com.spire.pdf.bookmarks.PdfBookmark;

import com.spire.pdf.bookmarks.PdfTextStyle;

import com.spire.pdf.general.PdfDestination;

import com.spire.pdf.graphics.PdfRGBColor;

import java.awt.*;

import java.awt.geom.Point2D;

public class AddBookmark {

public static void main(String[] args) {

//创建PdfDocument实例

PdfDocument pdf = new PdfDocument();

//加载PDF文档

pdf.loadFromFile("test.pdf");

//获取第一页

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

//添加书签

PdfBookmark bookmark = pdf.getBookmarks().add("第一部分 调查研究概述");

bookmark.setDisplayStyle(PdfTextStyle.Bold);//设置字体样式

bookmark.setColor(new PdfRGBColor(new Color(139, 69, 19)));//设置字体颜色

PdfDestination destination = new PdfDestination(page, new Point2D.Float(0, 0));//设置书签的目标页面和位置

bookmark.setAction(new PdfGoToAction(destination));

//添加二级子书签

PdfBookmark childBookmark = bookmark.add("第一节 菌种特性研究");

childBookmark.setColor(new PdfRGBColor(new Color(255, 127, 80)));//设置字体颜色

childBookmark.setDisplayStyle(PdfTextStyle.Italic);//设置字体样式

PdfDestination childDestination = new PdfDestination(page, new Point2D.Float(0, 100));//设置子书签的目标页面和位置

childBookmark.setAction(new PdfGoToAction(childDestination));

//添加三级子书签

PdfBookmark childBookmark1 = childBookmark.add("1. 菌种特性概念");

childBookmark1.setColor(new PdfRGBColor(new Color(125, 152, 100)));//设置字体颜色

childBookmark1.setDisplayStyle(PdfTextStyle.Italic);//设置字体样式

PdfDestination childDestination1 = new PdfDestination(page, new Point2D.Float(50, 100));//设置子书签的目标页面和位置

childBookmark1.setAction(new PdfGoToAction(childDestination1));

//保存文档

pdf.saveToFile("AddBookmarks.pdf");

pdf.dispose();

}

}

书签添加效果:

2.

编辑PDF

中已有的书签

import com.spire.pdf.*;

import com.spire.pdf.bookmarks.PdfBookmark;

import com.spire.pdf.bookmarks.PdfTextStyle;

import com.spire.pdf.graphics.PdfRGBColor;

import java.awt.*;

public class ModifyBookmark {

public static void main(String[] args) {

//创建PdfDocument实例

PdfDocument pdf = new PdfDocument();

//加载PDF文档

pdf.loadFromFile("AddBookmarks.pdf");

//获取第一个书签,修改书签标题、字体颜色、字体样式

PdfBookmark bookmark = pdf.getBookmarks().get(0);

bookmark.setTitle("新标题");

bookmark.setColor(new PdfRGBColor(new Color(255,20,147)));

bookmark.setDisplayStyle(PdfTextStyle.Bold);

//修改子书签的字体、颜色和字体样式等

for (int i = 0 ; i

//修改二级子书签

PdfBookmark childBookmark =  bookmark.get(0);

childBookmark.setColor(new PdfRGBColor(new Color(148,0,211)));

childBookmark.setDisplayStyle(PdfTextStyle.Italic);

//修改三级子书签

PdfBookmark childBookmark1 = childBookmark.get(0);

childBookmark1.setColor(new PdfRGBColor(new Color(255,215,0)) );

childBookmark1.setDisplayStyle(PdfTextStyle.Italic);

}

//保存文档

pdf.saveToFile("ModifyBookmarks.pdf");

pdf.close();

}

}

书签编辑结果:

3.

删除PDF

中的书签

import com.spire.pdf.*;

public class DeleteBookmark {

public static void main(String[] args) {

//创建PdfDocument实例,加载PDF文档

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddBookmarks.pdf");

//删除第一个书签(包括删除其包含的子书签)

pdf.getBookmarks().removeAt(0);

/*//仅删除子书签

PdfBookmark childBookmark = pdf.getBookmarks().get(0);

childBookmark.removeAt(0);*/

//保存文档

pdf.saveToFile("RemoveBookmark.pdf");

pdf.dispose();

}

}

4.

读取PDF

中的书签

import com.spire.pdf.*;

import com.spire.pdf.bookmarks.PdfBookmark;

import com.spire.pdf.bookmarks.PdfBookmarkCollection;

import java.io.FileWriter;

import java.io.IOException;

public class GetBookmark {

public static void main(String[] args) {

//加载包含书签的PDF文档

PdfDocument pdf = new PdfDocument();

pdf.loadFromFile("AddBookmarks.pdf");

//获取书签集合

PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();

//实例化StringBuilder类

StringBuilder stringbuilder = new StringBuilder();

//定义方法获取书签

GetBookmarkTitle(bookmarkCollection, stringbuilder);

//声明txt文件,并将获得的多级书签写入到文件.txt

FileWriter writer;

try {

writer = new FileWriter("读取的书签.txt");

writer.write(stringbuilder.toString());

writer.flush();

} catch (IOException e) {

e.printStackTrace();

}

pdf.dispose();

}

//定义方法获取书签标题

static void GetBookmarkTitle(PdfBookmarkCollection bookmarkCollection, StringBuilder stringbuilder)

{

if (bookmarkCollection.getCount()> 0)

{

for(int i = 0 ; i

{

PdfBookmark parentBookmark = bookmarkCollection.get(i);

stringbuilder.append(parentBookmark.getTitle());

//递归文档多级书签

GetBookmarkTitle(parentBookmark, stringbuilder);

}

}

}

}

书签读取结果:

(完)

java pdf 书签_Java PDF书签——添加、编辑、删除、读取书签相关推荐

  1. 在java中如何对数组实现添加、删除和插入操作呢?

    我们知道,在C语言和java当中都是一种十分重要的数据结构,但是熟悉数组的朋友都知道,数组一旦被赋值就很难被轻易改动,相比之下人们往往更偏向另一种类似于数组当中但比数组更灵活的集合类型.但是,爱挑战的 ...

  2. 创建java取消module_在idea 中添加和删除模块Module操作

    1.添加模块 2.删除模块 补充知识:IDEA添加子Module的正确姿势 因需求要增加一个新的测试模块,于是要在一堆Module中再添加一个Module,单纯的我没有丝毫杂念的开始进行添加了. 1. ...

  3. java jframe 图片_java中JFrame添加背景图片

    急!请帮忙修改这个Java程序,添加背景图片.源代码:importjava.awt.*;importjava.awt.event.*;importjava.net.URL;importjavax.sw ...

  4. java手动输入函数_Java程序如何添加一个函数,如果玩家输入错误,它将返回代码。...

    我的程序有问题,不是代码问题,而是我要怎么做,这是我一直困惑的部分.只是为了让你知道我是一个基本的Java编码器,我不理解复杂的东西,所以请记住,我的代码不是最好的. ---------------- ...

  5. java 按钮 事件_Java给按钮添加事件

    展开全部 赞一个, 提前学习, 做好预先 , 是个好习惯.java图形界面主要62616964757a686964616fe4b893e5b19e31333365636666有AWT, SWING, ...

  6. java 多选题_java+vue实现添加单选题、多选题到题库功能

    本文为大家分享了java+vue实现添加选择题到题库功能的具体代码,供大家参考,具体内容如下 做个备份 数据库表: 后台接口 @DeleteMapping("deleteQuestion&q ...

  7. java swing背景_java Swing中添加背景图片(总结)

    在java GUI图形化设计中,Swing组件添加背景图片主要有两中情况:1,在Jpanl面板中添加背景图片,2,在jLable中添加背景图片 首先介绍一种最巧妙的背景图片添加方法, 1.利用JLab ...

  8. mysql java中文乱码_java连接mysql添加中文乱码_MySQL

    bitsCN.com java添加中文数据到mysql中, 包含中文就乱码 最初是想应该是由于字符编码不一致,所以查看数据库的属性跟表的属性 查看表的字符集也是utf8,不是的改成自己想要设置的,我这 ...

  9. java jlist 图标_java – 将图像添加到JList项目

    您必须实现 ListCellRenderer(或扩展 DefaultListCellRenderer)并使用getListCellRendererComponent方法返回带有图标的Jlabel. 例 ...

最新文章

  1. KNN 分类算法原理代码解析
  2. 如何启动/停止/重启MySQL
  3. Oracle函数大全2
  4. 回车与换行 ASCII
  5. JavaScript进阶2-学习笔记
  6. js中如果无法获取某个html属性,例如自定义了一个dir属性,但获取总是为空,尝试换个词,因为可能什么关键词冲突了。...
  7. 外星人装深度linux,17xR4深度拆机教程、加装MSATA固态硬盘及评测
  8. MAC OS安装Composer + Laravel
  9. 【TypeScript】TypeScript 学习 4——模块
  10. poj 1723 中位数
  11. 花书+吴恩达深度学习(四)多分类 softmax
  12. apk ionic 破损_ionic3-android打包完美解决
  13. apk破解工具介绍与使用
  14. 串口与定时器的重要关系_单片机串口必备基础知识
  15. php不兼容_怎么解决php不兼容问题
  16. visa虚拟卡生成器_英国虚拟卡 获取多张VISA和Mastercard
  17. 给初次参加全国大学生智能汽车竞赛的同学们的一些建议(转)
  18. 个人投资者金融期货开户的条件
  19. ios实现类似魔兽小地图功能 在
  20. Android 中短信数据库的简单操作

热门文章

  1. kerberos认证_初识 Windows域认证体系 Kerberos认证
  2. BZOJ-3110-K大数查询-ZJOI2013-暴力
  3. CVPR 2017 SANet:《SANet: Structure-Aware Network for Visual Tracking》论文笔记
  4. 20211119 Latex中参考文献中的人名怪字母如何输入
  5. ThreadLocal的意义和实现
  6. 百练162:Post Office
  7. Asp.net mvc 添加Jquery UI
  8. Spring+Ibatis集成开发实例
  9. 30、驱动程序调用驱动程序
  10. Winfrom实用代码项目