如何在 Java 中添加 PDF 书签和大纲

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF for Java 的 Java 库使您能够使用 BookmarkManager 类以编程方式在 PDF 文档中添加书签和大纲,支持单层和多层书签结构,并可自定义导航点。

快速入门:在 Java 中添加 PDF 书签

1.安装 IronPDF for Java 库并设置许可证密钥 2.使用 PdfDocument.fromFile() 加载 PDF 3.使用 pdf.getBookmark() 获取 BookmarkManager 4.使用 addBookMarkAtEnd("Title", pageNumber) 添加书签 5.使用 pdf.saveAs() 保存 PDF

```java :title=快速入门 PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf")); BookmarkManager bookmarks = pdf.getBookmark(); bookmarks.addBookMarkAtEnd("Chapter 1", 0); pdf.saveAs(Path.of("bookmarked.pdf"));


PDF 书签可大大提高文档的可用性和导航功能。 大纲在 PDF 文件中提供结构化导航,允许用户像目录一样直接跳转到关键部分。 在处理需要有条理导航的冗长文档、报告或多章节 PDF 文件时,这种功能证明是必不可少的。

IronPDF for Java 简化了 Java 应用程序中的 PDF 操作。 其书签功能提供了在 PDF 文件中创建自定义书签的直接方法。 该库可与 Java 应用程序无缝集成,支持除书签之外的各种 PDF 操作功能,包括 [合并 PDF](https://ironpdf.com/java/how-to/java-merge-pdf-tutorial/)、[创建表格](https://ironpdf.com/java/how-to/create-forms/) 和 [添加水印](https://ironpdf.com/java/how-to/custom-watermark/)。

<div class="hsg-featured-snippet">
    <h2>如何添加PDF书签和大纲</h2>
    <ol>
        <li><a href="https://ironpdf.com/java/#download-modal">安装 Java 库为 PDF 添加书签</a></li>
        <li>Utilize the <strong>`PdfDocument`</strong> class to load an existing PDF file in Java</li>
        <li>Create and customize the bookmarks with the <strong>`BookmarkManager`</strong> class</li>
        <li>Use `addBookMarkAtEnd` to add bookmarks to specific pages of the PDF</li>
        <li>保存包含新目录和书签的 PDF 文档</li>
    </ol>
</div>

<h2>开始之前我需要什么?

在实施 PDF 书签之前,请确保在 Java 项目中正确配置了 IronPDF。 该库需要 Java 8 或更高版本,可使用 Maven 或 Gradle 轻松集成。 您需要在项目的构建文件中添加 IronPDF 依赖项。有关详细的设置说明,请参阅 [ 入门概述](https://ironpdf.com/java/docs/)。

您还必须确保您的许可证密钥配置正确,因为 IronPDF 需要许可证才能进行开发。 有关许可选项和实施的全面信息,请访问 [ 许可指南](https://ironpdf.com/java/get-started/license-keys/)。 在使用任何 IronPDF 功能之前,请在应用程序开始时设置许可证密钥。

<h2>如何在 PDF 中添加大纲和书签?

在本例中,我将使用此 [ 样本 PDF](/static-assets/ironpdf-java/howto/bookmarks/NovelSample.pdf) 来应用大纲和书签。 翻译过程包括加载现有的 PDF 文档,并利用 IronPDF 的 `BookmarkManager` 在整个文档中添加导航点。

<h3>如何添加单层书签?

<!-- 待办事项:在此处添加图片 -->
<!-- ![输出显示 IronPDF 中添加大纲和书签的示例结果](/static-assets/images/TODO/add-outline-bookmarks-example-code_output.webp) -->
<!--说明:显示代码执行输出或结果的截图 -->

使用 [`PdfDocument`.fromFile](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/PdfDocument.html) 类从指定文件路径加载此 PDF 后,检索 [`BookmarkManager`](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/bookmark/BookmarkManager.html) 对象以开始添加书签。 您可以使用 `addBookMarkAtEnd` 和 `addBookMarkAtStart` 方法将书签添加到书签集合的开始或结束位置。 这些方法可以根据文档结构灵活组织书签。

提示请记住,所有页面的索引都是基于零的索引。 ```java import java.io.IOException; import java.nio.file.Path; import com.ironsoftware.ironpdf.License; import com.ironsoftware.ironpdf.PdfDocument; import com.ironsoftware.ironpdf.bookmark.BookmarkManager; public class Main { public static void main(String[] args) throws IOException { // Set the license key for IronPDF License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01"); // Load the PDF file PdfDocument pdf = PdfDocument.fromFile(Path.of("NovelSample.pdf")); // Get BookmarkManager object to manage bookmarks BookmarkManager bookmarks = pdf.getBookmark(); // Add bookmarks at the end of the bookmark collection bookmarks.addBookMarkAtEnd("Title Page", 0); bookmarks.addBookMarkAtEnd("Table of Contents", 1); bookmarks.addBookMarkAtEnd("Dedication Page", 2); bookmarks.addBookMarkAtEnd("First Page", 3); bookmarks.addBookMarkAtStart("Page 4", 6); // Save the modified PDF with bookmarks pdf.saveAs(Path.of("bookmarked.pdf")); } }

使用上面的 PDF 查看器,查看大多数浏览器左上角的目录,查看所有添加的书签。 这种单层书签结构可为组织需求简单的文档提供直接导航。

如何创建多层书签? 在本例中,首先要添加书签,就像创建单层书签一样。 接下来,使用 [`insertBookmark`](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/bookmark/BookmarkManager.html#insertBookmark) 方法在新图层上添加新书签。 第一个参数指定书签名称,第二个参数指定书签链接到的页面。 要创建新层,请使用该方法的第三个参数将新书签设为现有书签的 "子"。 这种分层结构适合包含章节、小节和分节的文档。 ```java import java.io.IOException; import java.nio.file.Path; import com.ironsoftware.ironpdf.License; import com.ironsoftware.ironpdf.PdfDocument; import com.ironsoftware.ironpdf.bookmark.BookmarkManager; public class Main { public static void main(String[] args) throws IOException { // Set the license key License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01"); // Load the PDF file PdfDocument pdf = PdfDocument.fromFile(Path.of("NovelSample.pdf")); // Get BookmarkManager object BookmarkManager bookmarks = pdf.getBookmark(); // Add bookmarks at the end bookmarks.addBookMarkAtEnd("Title Page", 0); bookmarks.addBookMarkAtEnd("Table of Contents", 1); bookmarks.addBookMarkAtEnd("Dedication", 2); // Insert second layer bookmarks bookmarks.insertBookmark("First Page", 3, "Table of Contents", null); bookmarks.insertBookmark("Second Page", 4, "Table of Contents", "First Page"); bookmarks.insertBookmark("End of Sample", 7, "Title Page", null); bookmarks.insertBookmark("Fourth page", 6, "Table of Contents", "Second Page"); // Save the modified PDF with multiple layer bookmarks pdf.saveAs(Path.of("multiLayer.pdf")); } } ``` 在这里,您可以看到带有新书签树结构的 PDF。 查看大纲,了解 `insertBookmark` 功能如何添加了一层新书签。 这种多层次的方法适合技术文档、学术论文或任何需要详细导航结构的文档。

如何从 PDF 中检索现有书签? <!--说明:说明代码概念的图表或截图 --> IronPdf 的书签工具不仅可以添加新书签,还可以检索和查看现有书签。 在修改现有 PDF 或分析其结构时,这一功能证明是必不可少的。 要浏览书签,首先使用 [`PdfDocument.fromFile`](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/PdfDocument.html) 方法加载 PDF。 然后访问 **`BookmarkManager`** 对象,并使用 [`getBookmarks`](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/bookmark/BookmarkManager.html) 方法检索所有书签,包括子书签。 最后,使用 `get` 方法根据书签在列表中的索引检索书签。这种功能允许对现有的 PDF 导航结构进行编程检查和操作。 ```java import java.io.IOException; import java.nio.file.Path; import java.util.List; import com.ironsoftware.ironpdf.License; import com.ironsoftware.ironpdf.PdfDocument; import com.ironsoftware.ironpdf.bookmark.Bookmark; import com.ironsoftware.ironpdf.bookmark.BookmarkManager; public class Main { public static void main(String[] args) throws IOException { // Set the license key License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01"); // Load the PDF file with bookmarks PdfDocument pdf = PdfDocument.fromFile(Path.of("bookmarked.pdf")); // Retrieve the bookmark manager BookmarkManager bookmarks = pdf.getBookmark(); // Retrieve list of all bookmarks List bookmarkList = bookmarks.getBookmarks(); // Retrieve a specific bookmark by its index Bookmark bookmark = bookmarkList.get(2); // Print bookmark details System.out.println("Bookmark Title: " + bookmark.getText()); System.out.println("Page Number: " + bookmark.getPageIndex()); // Check if bookmark has children if(bookmark.getChildren() != null && !bookmark.getChildren().isEmpty()) { System.out.println("Number of child bookmarks: " + bookmark.getChildren().size()); } } } ```

如何在特定索引处插入书签? --> <!--说明:说明代码概念的图表或截图 --> 通过检索书签,您可以在文档中的特定索引处添加新书签。 该功能有助于用新章节更新现有 PDF 文件或重组文件结构。 为此,请选择目标书签并使用 [`addNextBookmark`](https://ironpdf.com/java/object-reference/api/com/ironsoftware/ironpdf/bookmark/Bookmark.html) 方法在其后添加新书签。 例如,从 **'添加多层书签'** 部分获取 PDF 文件,并在 **'第三页'** 书签后添加一个书签。 您还可以使用 `addChildBookmark` 方法添加子书签作为更深层次的书签,从而实现对文档导航层次结构的精确控制。 ```java import java.io.IOException; import java.nio.file.Path; import java.util.List; import com.ironsoftware.ironpdf.License; import com.ironsoftware.ironpdf.PdfDocument; import com.ironsoftware.ironpdf.bookmark.Bookmark; import com.ironsoftware.ironpdf.bookmark.BookmarkManager; public class Main { public static void main(String[] args) throws IOException { // Set the license key License.setLicenseKey("IRONPDF-MYLICENSE-KEY-1EF01"); // Load the PDF we modified earlier PdfDocument pdf = PdfDocument.fromFile(Path.of("multiLayer.pdf")); // Get the BookmarkManager BookmarkManager bookmarks = pdf.getBookmark(); // Retrieve the list of bookmarks List bookmarkList = bookmarks.getBookmarks(); // Retrieve a specific bookmark by its index Bookmark bookmark = bookmarkList.get(5); // Add a new bookmark after the specified bookmark bookmark.addNextBookmark("Fourth Page", 6); // Add another layer to 'Third page' bookmark bookmark.addChildBookmark("Section 1", 7); // Save the modified PDF pdf.saveAs(Path.of("specificIndex.pdf")); } } ``` [{i:(如果将两个书签名称相同的 PDF 文档合并在一起,可能会破坏书签列表本身。