IRONSOFTWAREHOME

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

Curtis Chau
Curtis Chau
Updated: 2026年6月16日

IronPDF的Java库使您可以通过BookmarkManager类以编程方式向PDF文档添加书签和大纲,支持单层和多层书签结构并具备可定制的导航点。

快速入门:在 Java 中添加 PDF 书签
  1. 安装 IronPDF Java 库并设置您的许可证密钥
  2. 使用PdfDocument.fromFile()加载您的PDF
  3. 使用BookmarkManager
  4. 使用addBookMarkAtEnd("Title", pageNumber)添加书签
  5. 使用pdf.saveAs()保存PDF
  1. 1Install IronPDF with Maven Central Repository

    > mvn install

  2. 2复制并运行这段代码。

    //:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/quickstart.java
    PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf"));
    BookmarkManager bookmarks = pdf.getBookmark();
    bookmarks.addBookMarkAtEnd("Chapter 1", 0);
    pdf.saveAs(Path.of("bookmarked.pdf"));
    Java
  3. 3部署到您的生产环境中进行测试

    通过免费试用立即在您的项目中开始使用IronPDF
    arrow pointer

PDF书签改善了文档的可用性和导航。 大纲提供了PDF内部的结构化导航,使用户可以直接跳转到关键部分,就像目录一样。 这在处理需要组织导航的长篇文档、报告或多章节PDF时至关重要。

IronPDF for Java 简化了 Java 应用程序中的 PDF 操作。 书签API为您提供了创建PDF文件自定义书签的简单方法。 该库与Java应用结合,还支持除书签外的各种PDF处理功能,包括合并PDF、创建表单,添加水印。

开始之前我需要什么?

在实现PDF书签之前,请确认IronPDF已在您的Java项目中配置。 该库需要Java 8或更高版本,并通过Maven或Gradle集成。 将IronPDF依赖项添加到项目的构建文件中。有关详细设置说明,请参阅快速入门概述。

开发和生产使用需要有效的许可证密钥。 在调用任何IronPDF方法之前,在应用程序开头设置许可证密钥。 有关许可选项的信息,请访问许可指南。

提示: IronPDF中的所有页面索引使用零基编号。 您的文档的第1页为索引0,第2页为索引1,以此类推。

如何向PDF添加大纲和书签?

以下示例使用此示例PDF演示大纲和书签创建。 该过程包括加载现有的PDF文档并使用IronPDF的BookmarkManager在整个文档中添加导航点。

如何添加单层书签?

平面书签列表适合具有明确的、非层次结构的文档:报告、产品手册或幻灯片演示文稿,各部分独立。 使用BookmarkManager对象以开始添加书签。

addBookMarkAtStart方法分别在书签集合的末尾或开头添加条目。 这些方法可以灵活地组织书签以匹配文档的结构。 每个条目都接受显示标题和零基页面索引。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/single-layer.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"));
    }
}
Java

在上方PDF查看器中,检查大多数浏览器左上角的目录以查看所有已添加的书签。 这种平面书签结构为简单组织需求的文档提供了直接的导航。

如何创建多层书签?

嵌套书签适用于技术文档、研究报告或任何多章文档,读者需要导航到不仅是章节,还有这些章节内的小节。 从前面部分创建的相同的平面书签开始,然后使用insertBookmark在新层上添加条目。

insertBookmark方法接受四个参数:书签名称、目标页面索引、父书签名称和前置兄弟书签名称。 传递父书签名称会创建一个嵌套在其下的子条目。 将兄弟参数设置为null将新条目放置为该父条目的第一个子元素。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/multi-layer.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 top-level bookmarks at the end
        bookmarks.addBookMarkAtEnd("Title Page", 0);
        bookmarks.addBookMarkAtEnd("Table of Contents", 1);
        bookmarks.addBookMarkAtEnd("Dedication", 2);

        // Insert second-layer bookmarks as children of existing entries
        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 nested bookmarks
        pdf.saveAs(Path.of("multiLayer.pdf"));
    }
}
Java

上面的PDF展示了由insertBookmark创建的书签树结构。 展开大纲面板以验证每个子条目如何嵌套在其父级下。 这种分层方法适合章节、子章节和附录的报告。


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

从PDF中读取书签数据是更新文档而不重建整个导航结构的先决条件。 IronPDF通过用于添加书签的同一BookmarkManager接口提供此功能。 使用getBookmarks()检索所有顶级书签。

使用getPageIndex()返回其目标页面的零基页码。 子书签不包括在getBookmarks()返回的平面列表中; 通过每个父书签的getChildren()方法访问它们。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/retrieve-bookmarks.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 (includes child bookmarks)
        List<Bookmark> bookmarkList = bookmarks.getBookmarks();

        // Access a specific bookmark by zero-based 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
请注意: getBookmarks()方法仅返回顶级书签的平面列表。 若要遍历完整的书签树,递归调用getChildren()在每个具有嵌套条目的书签上。

这种检索模式在分发前审计现有PDF的导航结构时很有用,或在构建工具时需要验证必需的部分在发布前正确加书签。


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

在特定位置插入书签允许您逐步更新现有PDF,在不从头重建完整大纲的情况下添加新部分。 当PDF在流水线中生成或修改,新内容在下游追加时,这尤其有用。

使用addNextBookmark在其之后立即插入一个新的兄弟。 使用addChildBookmark将新条目放置在更深一级,嵌套在所选书签下。 这两种方法都接受标题字符串和零基页面索引。

//:path=/static-assets/ironpdf-java/content-code-examples/how-to/bookmarks/insert-at-index.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 modified in the multi-layer example
        PdfDocument pdf = PdfDocument.fromFile(Path.of("multiLayer.pdf"));

        // Get the BookmarkManager
        BookmarkManager bookmarks = pdf.getBookmark();
        
        // Retrieve the flat bookmark list
        List<Bookmark> bookmarkList = bookmarks.getBookmarks();
        
        // Select a bookmark at a specific index
        Bookmark bookmark = bookmarkList.get(5);
        
        // Insert a new bookmark after the selected entry
        bookmark.addNextBookmark("Fourth Page", 6);
        
        // Add a child bookmark under the selected entry
        bookmark.addChildBookmark("Section 1", 7);

        // Save the updated PDF
        pdf.saveAs(Path.of("specificIndex.pdf"));
    }
}
Java
请注意: 合并两个书签名称相同的PDF时,合并后的书签列表可能表现异常。 在合并前重命名冲突的书签以维持干净的大纲。)]

addChildBookmark方法将新条目放置在更深一级,嵌套在所选书签下。 这两种方法都接受标题字符串和零基页面索引。

Java中的PDF书签的下一步是什么?

PDF书签为用户提供了一个直接的导航路径,通过复杂文档而无需滚动。 IronPDF的BookmarkManager处理了完整的书签操作范围:添加平面条目列表、建立深层多层大纲、检索现有条目以及在特定位置插入。

要继续研究文档结构和导航功能,请探索这些相关资源:

开始您的免费试用,将书签、大纲和其他导航功能添加到您的Java PDF工作流程。 要购买用于生产使用的许可证,请查看许可证选项。

常见问题解答

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

使用PdfDocument.fromFile()加载PDF,然后调用pdf.getBookmark()获取BookmarkManager。使用addBookMarkAtEnd("Title", pageIndex)通过显示名称和零基页码添加每个书签,然后使用pdf.saveAs()保存。

在Java中添加PDF书签的先决条件是什么?

您需要Java 8或更高版本,作为Maven或Gradle依赖添加的IronPDF库,并在任何IronPDF调用之前使用License.setLicenseKey()设置有效的许可证密钥。不需要其他工具或框架。

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

是的。首先使用addBookMarkAtEnd添加顶级书签,然后调用insertBookmark(name, pageIndex, parentName, siblingName)将子条目嵌套于父书签下。传递null作为兄弟名称以将新条目放置为第一个子项。

addBookMarkAtEnd和insertBookmark有什么区别?

addBookMarkAtEnd在书签列表的末尾附加一个新的顶级条目。insertBookmark通过指定父书签名称和可选的先前兄弟将书签放置在层次结构中的特定位置,启用嵌套大纲。

如何从Java中的PDF读取现有书签?

调用pdf.getBookmark().getBookmarks()获取顶级书签的平面列表。使用list.get(index)按索引访问单个条目。使用bookmark.getText()获取标题,并使用bookmark.getPageIndex()获取零基页码。通过bookmark.getChildren()访问子书签。

如何在特定现有书签后插入书签?

使用getBookmarks()检索书签列表,通过索引选择目标条目,然后调用bookmark.addNextBookmark("Title", pageIndex)在其后立即插入兄弟书签,或bookmark.addChildBookmark("Title", pageIndex)在其下嵌套一个新条目。

What features does IronPDF provide beyond PDF bookmarking?

IronPDF supports a variety of PDF manipulation features such as merging PDFs, creating forms, adding watermarks, and many more functionalities that integrate with Java applications.

How do you insert a bookmark at a specific index in a PDF with IronPDF?

Use `addNextBookmark` to insert a bookmark immediately after a specific entry and `addChildBookmark` to place a new entry one level deeper under a selected bookmark.

Can IronPDF handle PDF generation and modification pipelines?

Yes, IronPDF allows for incremental updates to PDFs, making it suitable for pipelines where new content can be appended with appropriate bookmarks without rebuilding the entire document structure.

Where can I find more information about using IronPDF for Java?

You can explore additional resources and tutorials on the IronPDF website, which provide detailed examples for splitting PDFs, printing, adding annotations, and using the full range of IronPDF Java API features.

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

准备开始了吗?

版本:2026.6刚刚发布

立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
Java Maven PDF 库
using Maven 安装

版本: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
Java PDF JAR
下载 JAR

版本: 2026.6

手动安装到您的项目中

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
Java Maven PDF 库
using Maven 安装

版本: 2026.6

<dependency>
   <groupId>com.ironsoftware</groupId>
   <artifactId>ironpdf</artifactId>
   <version>2026.6.1</version>
</dependency>
https://central.sonatype.com/artifact/com.ironsoftware/ironpdf/2026.6.1
or
Java PDF JAR
下载 JAR

版本: 2026.6

手动安装到您的项目中