使用 Apache PDFBox 在 Java 中为 PDF 文档创建书签

介绍

在本教程中,我们将学习如何使用 Apache PDFBox 库将书签项添加到 Java 中的 PDF 文档中。该帖子还展示了如何为新的 PDF 文档和现有的 PDF 文件添加书签。

Apache PDFBox 库概述

Apache PDFBox 是一个用于处理 PDF 文档的开源 Java 库。您可以在pdfbox.apache.org获得有关该项目的更多信息

添加 Apache PDFBox 依赖项

如果您使用 Gradle 构建工具,请将以下依赖项添加到 build.gradle 文件中。

compile group: 'org.apache.pdfbox', name: 'pdfbox', version: '2.0.18'

如果您使用的是 Maven 构建工具,请将以下 XML 添加到 pom.xml 文件中。

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.18</version>
</dependency>

或者您可以从pdfbox.apache.org/download.cgi下载 pdfbox-2.0.18.jar 文件

第 1 步 - 创建空 PDF 文档并添加 10 个空白页

try (PDDocument document = new PDDocument()) {
    for (int i = 0; i < 10; i++) {
        document.addPage(new PDPage());
    }

} catch (IOException e) {
    e.printStackTrace();
}

第 2 步 - 创建书签项目并设置其目的地

通过本教程,我们将为 10 页文档创建书签,如下所示。

首先,为“所有页面”创建书签项

PDDocumentOutline documentOutline = new PDDocumentOutline();
document.getDocumentCatalog().setDocumentOutline(documentOutline);
PDOutlineItem pagesOutline = new PDOutlineItem();
pagesOutline.setTitle("All Pages");
documentOutline.addLast(pagesOutline);

其次,我们遍历文档的每一页并为每一页创建书签项。

for(int i = 0; i < document.getNumberOfPages(); i++) {
    PDPageDestination pageDestination = new PDPageFitWidthDestination();
    pageDestination.setPage(document.getPage(i));
				
    PDOutlineItem bookmark = new PDOutlineItem();
    bookmark.setDestination(pageDestination);
    bookmark.setTitle("Document Page " + (i + 1));
    pagesOutline.addLast(bookmark);
}

并调用 openNode() 方法来设置书签节点在 PDF 阅读器应用程序打开时打开或展开。

pagesOutline.openNode();
documentOutline.openNode();

然后设置模式以允许 PDF 阅读器应用程序在打开 PDF 文档时显示书签面板。

document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

第 3 步 - 将 PDF 文件保存到磁盘

document.save("D:\\SimpleSolution\\BookmarkDocument.pdf");

完整的 Java 应用程序代码

package dev.simplesolution;

import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PageMode;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;

public class AddBookmarkPdfDocument {

	public static void main(String[] args) {
		try (PDDocument document = new PDDocument()) {
			for (int i = 0; i < 10; i++) {
				document.addPage(new PDPage());
			}

			PDDocumentOutline documentOutline = new PDDocumentOutline();
			document.getDocumentCatalog().setDocumentOutline(documentOutline);
			PDOutlineItem pagesOutline = new PDOutlineItem();
			pagesOutline.setTitle("All Pages");
			documentOutline.addLast(pagesOutline);
			
			for(int i = 0; i < document.getNumberOfPages(); i++) {
				PDPageDestination pageDestination = new PDPageFitWidthDestination();
				pageDestination.setPage(document.getPage(i));
				
				PDOutlineItem bookmark = new PDOutlineItem();
				bookmark.setDestination(pageDestination);
				bookmark.setTitle("Document Page " + (i + 1));
				pagesOutline.addLast(bookmark);
			}

			pagesOutline.openNode();
			documentOutline.openNode();
			
			document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

			document.save("D:\\SimpleSolution\\BookmarkDocument.pdf");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

执行上面的 Java 应用程序,然后在 D:\SimpleSolution\BookmarkDocument.pdf 中创建 PDF 文件

 

 

为现有 PDF 文件添加书签

要首先向现有 PDF 文档添加书签,我们使用 PDDocument.load() 静态方法来加载文档,如下所示。

try (PDDocument document = PDDocument.load(new File("D:\\SimpleSolution\\Document.pdf"))) {

} catch (IOException e) {
    e.printStackTrace();
}

下面是为位于 D:\SimpleSolution\Document.pdf 的现有文件创建书签的示例 Java 应用程序

package dev.simplesolution;

import java.io.File;
import java.io.IOException;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PageMode;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDPageFitWidthDestination;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDDocumentOutline;
import org.apache.pdfbox.pdmodel.interactive.documentnavigation.outline.PDOutlineItem;

public class AddBookmarkExistingPdfDocument {
	
	public static void main(String[] args) {
		try (PDDocument document = PDDocument.load(new File("D:\\SimpleSolution\\Document.pdf"))) {
			PDDocumentOutline documentOutline = new PDDocumentOutline();
			document.getDocumentCatalog().setDocumentOutline(documentOutline);
			PDOutlineItem pagesOutline = new PDOutlineItem();
			pagesOutline.setTitle("All Pages");
			documentOutline.addLast(pagesOutline);
			
			for(int i = 0; i < document.getNumberOfPages(); i++) {
				PDPageDestination pageDestination = new PDPageFitWidthDestination();
				pageDestination.setPage(document.getPage(i));
				
				PDOutlineItem bookmark = new PDOutlineItem();
				bookmark.setDestination(pageDestination);
				bookmark.setTitle("Document Page " + (i + 1));
				pagesOutline.addLast(bookmark);
			}

			pagesOutline.openNode();
			documentOutline.openNode();
			
			document.getDocumentCatalog().setPageMode(PageMode.USE_OUTLINES);

			document.save("D:\\SimpleSolution\\Document.pdf");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

下载源代码

本文中的源代码可以在以下位置找到:github.com/simplesolutiondev/ApachePDFBoxAddBookmarkPdfDocument

或下载:

下载源代码

快乐编码😊

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值