概述

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

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

2. 编辑书签(包括重置书签标题、书签样式等)

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包:

<repositories>
<repository>
<id>com.e-iceblue</id>
<url>http://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories> <dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf.free</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies>

(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< pdf.getBookmarks().getCount(); 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< bookmarkCollection.getCount(); i++ )
{
PdfBookmark parentBookmark = bookmarkCollection.get(i);
stringbuilder.append(parentBookmark.getTitle());
//递归文档多级书签
GetBookmarkTitle(parentBookmark, stringbuilder);
}
}
}
}

书签读取结果:

(完)

Java PDF书签——添加、编辑、删除、读取书签的更多相关文章

  1. 如何通过Java应用程序添加或删除 PDF 中的附件

    当我们在制作PDF文件或者PPT演示文稿的时候,为了让自己的文件更全面详细,就会在文件中添加附件.并且将相关文档附加到 PDF 可以方便文档的集中管理和传输.那么如何添加或删除 PDF 中的附件呢?别 ...

  2. 如何使用C#程序给PDF文件添加编辑域

    PDF文档通常是不能编辑的,但有些时候需要在PDF文档中填写日期或签名之类,就需要在PDF有能编辑的文本域,本文介绍怎样用C#来实现这一功能. 环境 工具:VS2015 语言:C# 操作PDF类库:i ...

  3. jquery easyui使用(四)······添加,编辑,删除

    前端: <div style="font-size: 25px; font-weight: 700; margin: 50px 0 10px 10px;"> 车辆登记 ...

  4. Java 操作Word书签(一):添加、删除、读取书签

    Word中,书签功能常用于查找.定位.标记特定字符或段落,对于篇幅较大的文档,此功能非常实用.下面,将介绍通过Java程序来添加及删除Word书签的方法.示例要点包括: 1. 添加书签 1.1 给指定 ...

  5. Java 添加、删除、移动、隐藏/显示Excel工作表

    本文内容将介绍通过Java程序如何添加.删除.移动工作表,以及设置工作表隐藏.显示等操作.文中使用了Java Excel类库(Free Spire.XLS for Java 免费版),可通过官网下载包 ...

  6. PDF如何设置书签,怎么在PDF上添加书签

    PDF文件现在作为我们使用最多的一种办公文件,当然我们在使用PDF文件的同时还会需要编辑PDF文件,在使用一个PDF文件页数比较多的时候就需要添加书签,不然每次使用的时候都需要从头开始查找是很麻烦又头 ...

  7. Java读取json文件并对json数据进行读取、添加、删除与修改操作

    转载:http://blog.csdn.net/qing_yun/article/details/46865863#t0   1.介绍 开发过程中经常会遇到json数据的处理,而单独对json数据进行 ...

  8. pypdf2:下载Americanlife网页生成pdf合并pdf并添加书签

    初步熟悉 安装 pip install pypdf2 合并并添加书签 #!/usr/bin/env python3.5 # -*- coding: utf-8 -*- # @Time : 2019/1 ...

  9. 如何给PDF文档添加和删除贝茨编号

    PDF文件的使用频率高了,我们也不只局限于使用PDF文件了,也会需要编辑PDF文件的时候,那么如何在PDF文件中添加和去除贝茨编号呢,应该有很多小伙伴都想知道吧,今天就来跟大家分享一下吧,小伙伴们就一 ...

  10. Java实现文本创建、删除、编辑内容

    Java实现文本创建.删除.编辑内容 1,创建文本代码: //创建文件并追加内容 public static void writeContentToTxt(StringBuffer Content,F ...

随机推荐

  1. .NET微服务系列之Saga分布式事务案例实践

    自从Wing正式发布以后,很多童鞋反馈对Saga分布式事务比较感兴趣,今天就跟大家分享一下"跨行转账"的分布式事务实践案例,入门使用教程请自行前往Wing官方文档. 假设自己名下有 ...

  2. 栈溢出-GOT表劫持测试

    1.目标程序源代码 char name[64]; int main(){ int unsigned long long addr; setvbuf(stdin,0,2,0); setvbuf(stdo ...

  3. 管道channel

    管道 go语言中管道底层是一个环形队列(先进先出),写入(send)和 取出(recv)都是从同一个位置按照同一方向顺序执行. sendx表示最后一次插入元素位置,recvx表示最后一次取出元素的位置 ...

  4. SNN_文献阅读_Effective and Efficient Computation with Multiple-timescaleSpiking Recurrent Neural Networks

    Adaptive SRNN 基于多时间尺度脉冲循环神经网络的高效计算(SRNN) 中心思想: 使用替代梯度进行训练,克服SNN中梯度不连续的问题. 在PyTorch中直接使用BPTT进行训练. 结构 ...

  5. 微服务系列-基于Spring Cloud Eureka进行服务的注册与消费

    公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 在之前的几个教程中,我们学了: 使用 RestTemplate 的 Spring Boot 微服务通信示例 使用 WebC ...

  6. SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!

    一.前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 最近ChatGPT非常受欢迎,尤其是在编 ...

  7. 【scipy 基础】--稀疏矩阵

    稀疏矩阵是一种特殊的矩阵,其非零元素数目远远少于零元素数目,并且非零元素分布没有规律.这种矩阵在实际应用中经常出现,例如在物理学.图形学和网络通信等领域. 稀疏矩阵其实也可以和一般的矩阵一样处理,之所 ...

  8. .net 温故知新【13】:Asp.Net Core WebAPI 缓存

    一.缓存 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快. 从概念上讲,缓存是一种性能优化策略和设计考虑因素. 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性. ...

  9. 【Javaweb】做一个房产信息管理系统一

    2019级<JAVA语言程序设计>     上机考试试题                                  2020.12.20     考试要求   一.本试卷为2019 ...

  10. 在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文

    在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文 首先回顾下四次挥手的过程. 第一次挥手:客户端停止发送数据,主动关闭 TCP 连接,处于FIN_WAIT1状态,等待服务端确认. 第二次挥 ...