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

目录

  1. 前言

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

  3. PDF文档添加书签

  4. 修改现有书签

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

  6. 读取书签标题

  7. PDF文档中删除书签


前言

书签在一些PDF教程和篇幅较长的PDF文档中比较常见,它可以帮我们快速了解一篇文章的内容结构,以及快速定位到文中的某一个位置。这篇文章将介绍如何使用免费PDF组件- Free Spire.PDF for JavaJava应用程序中操作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 文档转换为 WordHTML、图片、SVG PDF/A 格式,以及将XPSPDF互转。

如果你的项目是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 Javajar文件。


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");

1.png

以下例子展示了如何创建一个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");

2.png

除了在新建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");

4.png


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

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

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

5.png


读取书签标题

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

//读取书签
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("AddChildBookmark.pdf");

PdfBookmarkCollection bookmarks = pdf.getBookmarks();
StringBuilder builder = new StringBuilder();
ReadBookmarks(bookmarks, builder);
FileWriter fw = new FileWriter("Bookmarks.txt");
try {
    //Write text into a .txt file
    fw.write(builder.toString());
    fw.flush();
} catch (IOException e) {
    e.printStackTrace();
}

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);
        }
    }
}

6.png


删除书签

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



猜你喜欢

转载自blog.51cto.com/13688031/2347682
今日推荐