介绍
在本教程中,我们将学习如何使用 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
或下载:
快乐编码😊