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

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

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

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

1.安装 IronPDF for Java 库并设置许可证密钥

  1. 使用 PdfDocument.fromFile() 加载您的 PDF 文件
  2. 获取 BookmarkManagerpdf.getBookmark()
  3. 使用 addBookMarkAtEnd("Title", pageNumber) 添加书签
  4. 使用 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">
    <h3>如何添加PDF书签和大纲</h3>
    <ol>
        <li><a href="https://ironpdf.com/java/#download-modal">安装 Java 库为 PDF 添加书签</a></li>
        <li>Utilize the **`PdfDocument`** class to load an existing PDF file in Java</li>
        <li>Create and customize the bookmarks with the **`BookmarkManager`** class</li>
        <li>Use `addBookMarkAtEnd` to add bookmarks to specific pages of the PDF</li>
        <li>保存包含新目录和书签的 PDF 文档</li>
    </ol>
</div>

## 开始之前我需要什么?

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

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

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

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

### 如何添加单层书签?

使用[`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方法在新图层上添加新书签。 第一个参数指定书签名称,第二个参数指定书签链接到的页面。 要创建新层,请使用该方法的第三个参数将新书签设为现有书签的 "子"。 这种分层结构适合包含章节、小节和分节的文档。

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"));
    }
}
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"));
    }
}
JAVA

在这里,您可以看到带有新书签树结构的 PDF。 查看大纲,了解 insertBookmark 功能如何添加了一个新的书签层。 这种多层次的方法适合技术文档、学术论文或任何需要详细导航结构的文档。


如何从 PDF 中检索现有书签?

IronPdf 的书签工具不仅可以添加新书签,还可以检索和查看现有书签。 在修改现有 PDF 或分析其结构时,这一功能证明是必不可少的。 要浏览书签,首先使用PdfDocument.fromFile方法加载 PDF。 然后访问BookmarkManager对象,并使用getBookmarks方法检索所有书签,包括子书签。 最后,可以使用 get 方法,根据书签在列表中的索引检索该书签。此功能允许以编程方式检查和操作现有的 PDF 导航结构。

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<Bookmark> 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());
        }
    }
}
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<Bookmark> 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());
        }
    }
}
JAVA

如何在特定索引处插入书签?

通过检索书签,您可以在文档中的特定索引处添加新书签。 该功能有助于用新章节更新现有 PDF 文件或重组文件结构。 要实现这一点,请选择目标书签,然后使用addNextBookmark方法在其后添加新书签。 例如,从 '添加多层书签' 部分获取 PDF 文件,并在 '第三页' 书签后添加一个书签。 您还可以使用 addChildBookmark 方法添加子书签作为更深层次的书签,从而精确控制文档的导航层次结构。

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<Bookmark> 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"));
    }
}
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<Bookmark> 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"));
    }
}
JAVA

如果将两个书签名称相同的 PDF 文档合并在一起,可能会破坏书签列表本身。

在复杂的 PDF 工作流程中处理书签时,可考虑探索 IronPDF 的其他功能,如 拆分 PDF 以创建具有自己书签结构的较小文档,或 打印 PDF 并保留书签导航功能。 有关更高级的示例和完整的代码演示,请查看我们示例部分中的 bookmarks 代码示例

常见问题解答

如何在 Java PDF 文档中添加书签?

您可以使用 IronPDF 的 BookmarkManager 类为 PDF 文档添加书签。首先,使用 PdfDocument.fromFile() 加载 PDF 文件,然后使用 pdf.getBookmark() 访问书签管理器,并使用 addBookMarkAtEnd() 方法指定书签标题和页码添加书签。

以编程方式添加 PDF 书签的前提条件是什么?

要使用 IronPDF 添加 PDF 书签,您需要 Java 8 或更高版本、通过 Maven 或 Gradle 集成的 IronPDF 库以及在应用程序中配置的有效许可证密钥。该库支持单层和多层书签结构。

能否在 PDF 中创建多级书签层次结构?

是的,IronPDF 支持创建单层和多层书签结构。您可以使用 BookmarkManager 类创建带有父书签和子书签的分层导航,以组织复杂的 PDF 文档。

PDF 书签和大纲的目的是什么?

PDF 书签和大纲通过提供结构化导航,大大提高了文档的可用性。它们允许用户直接跳转到目录等关键部分,这对于冗长的文档、报告或多章节 PDF 尤为重要。IronPDF 可以轻松地通过编程实现这些导航功能。

除了书签,还有哪些其他 PDF 操作功能?

除了添加书签,IronPDF 还提供全面的 PDF 操作功能,包括合并 PDF、创建表格、添加水印以及其他各种文档处理功能。这些功能可与 Java 应用程序无缝集成,实现完整的 PDF 管理。

添加书签后如何保存 PDF?

使用 IronPDF 的 BookmarkManager 添加书签后,通过调用 PdfDocument 对象上的 saveAs() 方法保存修改后的 PDF 文档,并指定要保存书签 PDF 的输出文件路径。

Darrius Serrant
全栈软件工程师(WebOps)

Darrius Serrant 拥有迈阿密大学的计算机科学学士学位,目前在 Iron Software 担任全栈 WebOps 市场工程师。从小就被编码吸引,他认为计算机既神秘又易于接触,使其成为创意和问题解决的理想媒介。

在 Iron Software,Darrius 喜欢创造新事物,并简化复杂概念以使其更易理解。作为我们常驻的开发者之一,他还自愿教授学生,与下一代分享他的专业知识。

对于 Darrius 来说,他的工作令人满意,因为它被重视并产生真正的影响。

准备开始了吗?
版本: 2026.3 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据?
运行示例看着你的HTML代码变成PDF文件。