乐趣区

关于java:Java-添加修改读取PDF书签

一、序言

在前文中,我曾介绍过如何应用 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");
    }
}

增加成果:

示例 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();}
}

批改成果:

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

读取成果:

(本文完)

退出移动版