Java 操作PDF书签详解 - 添加、修改、读取和删除

目录

  1. 前言

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

  3. 给PDF文档添加书签

  4. 修改现有书签

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

  6. 读取书签标题

  7. 从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库支持。

<repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
        </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.free</artifactId>
        <version>2.0.0</version>
    </dependency>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.pdf.common.free</artifactId>
        <version>2.0.0</version>
    </dependency>
</dependencies>


 也可以通过官网下载地址下载最新的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");

Java 操作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");

Java 操作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");

Java 操作PDF书签详解 - 添加、修改、读取和删除


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

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

//加载PDF
  PdfDocument pdf = new PdfDocument();
  pdf.loadFromFile("AddChildBookmark.pdf");
 
  //false为折叠,true为展开
  pdf.getViewerPreferences().setBookMarkExpandOrCollapse(false);
 
  //保存
  pdf.saveToFile("CollapseBookmark.pdf");

Java 操作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<PdfBookmark>) bookmarks)
        {
            builder.append(parentBookmark.getTitle()+"\r\n");
            ReadBookmarks(parentBookmark,builder);
        }
    }
}

Java 操作PDF书签详解 - 添加、修改、读取和删除


删除书签

以下示例删除了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");
 


 


上一篇:js判断当前H5是否在微信小程序的web-view中


下一篇:js判断当前H5是否在微信小程序的web-view中