Java 添加、修改、读取PDF书签

Tina_Tang

一、序言

在前文中,我曾介绍过如何使用Java程序来添加、读取和删除Word书签。与Word文档一样,PDF文档同样也可进行书签的添加、修改及读取。本文就将通过代码演示来详细讲解其操作方法。

二、环境搭建

本文代码演示所用到的工具为Free Spire.PDF for Java, 可通过官网下载获取。解压文档后将lib文件夹下的Spire.Pdf.jar手动导入Java程序。

另外,也可通过Maven仓库将JAR包安装到Maven项目中。仅需在pom.xml文件中配置Maven仓库路径,并指定Free Spire.PDF for Java的Maven依赖。配置完成后,点击“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>

三、代码演示

示例1 添加PDF标签
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
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("C:\\Users\\Test1\\Desktop\\Sample.pdf");

        //获取第一页
        PdfPageBase page = pdf.getPages().get(0);
        //添加书签
        PdfBookmark bookmark = pdf.getBookmarks().add("贴春联");
        //设置书签的目标页面和位置
        PdfDestination destination = new PdfDestination(page, new Point2D.Float(0, 0));
        bookmark.setAction(new PdfGoToAction(destination));
        //设置字体颜色
        bookmark.setColor(new PdfRGBColor(new Color(2, 139, 2)));
        //设置字体样式
        bookmark.setDisplayStyle(PdfTextStyle.Bold);

        //添加子书签
        PdfBookmark childBookmark = bookmark.add("春联的种类比较多,依其使用场所,可分为门心、框对、横披、春条、斗方等。");
        //设置子书签的目标页面和位置
        PdfDestination childDestination = new PdfDestination(page, new Point2D.Float(0, 100));
        childBookmark.setAction(new PdfGoToAction(childDestination));
        //设置字体颜色
        childBookmark.setColor(new PdfRGBColor(new Color(255, 80, 226)));
        //设置字体样式
        childBookmark.setDisplayStyle(PdfTextStyle.Italic);

        //保存结果文档
        pdf.saveToFile("output/AddBookmarks.pdf");
    }
}

添加效果:

output1.png

示例2 修改PDF书签
import com.spire.pdf.PdfDocument;
import com.spire.pdf.bookmarks.PdfBookmark;
import com.spire.pdf.bookmarks.PdfTextStyle;
import com.spire.pdf.graphics.PdfRGBColor;
import java.awt.*;

public class EditBookmark {
    public static void main(String[] args)  {
        //创建PdfDocument实例
        PdfDocument doc = new PdfDocument();
        //加载PDF文档
        doc.loadFromFile("C:\\Users\\Test1\\Desktop\\AddBookmarks.pdf");
        //获取第一个书签
        PdfBookmark bookmark = doc.getBookmarks().get(0);
        //修改书签的标题
        bookmark.setTitle("新标题");
        //修改书签的字体颜色
        bookmark.setColor(new PdfRGBColor(new Color(255,0,0)));
        //修改书签的字体样式
        bookmark.setDisplayStyle(PdfTextStyle.Italic);

        //修改第一个书签的子书签的字体颜色和字体样式
        for (PdfBookmark childBookmark : (Iterable <PdfBookmark>) bookmark) {
            childBookmark.setColor(new PdfRGBColor(new Color(0, 0, 255)));
            childBookmark.setDisplayStyle(PdfTextStyle.Bold);
        }

        //保存文档
        doc.saveToFile("output/EditBookmarks.pdf");
        doc.close();
    }
}

修改效果:

output2.png

示例3 读取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 ReadBookmark {
    public static void main(String[] args) {
        //加载包含书签的PDF文档
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("C:\\Users\\Test1\\Desktop\\AddBookmarks.pdf");

        //获取书签集合
        PdfBookmarkCollection bookmarkCollection = pdf.getBookmarks();

        //实例化StringBuilder类
        StringBuilder stringbuilder = new StringBuilder();

        //定义方法获取书签
        GetBookmarkTitle(bookmarkCollection, stringbuilder);

        //声明txt文件,并将获得的多级书签写入到文件.txt
        FileWriter writer;
        try {
            writer = new FileWriter("output/ReadBookmark.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);
            }
        }
    }
}

读取效果:

output3.png

(本文完)

阅读 1.5k
284 声望
0 粉丝
0 条评论
284 声望
7 粉丝
宣传栏