ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-01-29 17:56:30  阅读:661  来源: 互联网

标签:Java bookmark PdfDocument 书签 new PDF 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");

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文档中的书签标题:

//加载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);
        }
    }
}

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


 


标签:Java,bookmark,PdfDocument,书签,new,PDF,pdf
来源: http://blog.51cto.com/13688031/2347682

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有