如何在 Java 中添加 PDF 书签和大纲
IronPDF的Java库使您可以通过BookmarkManager类以编程方式向PDF文档添加书签和大纲,支持单层和多层书签结构并具备可定制的导航点。
快速入门:在 Java 中添加 PDF 书签
- 安装 IronPDF Java 库并设置您的许可证密钥
- 使用
PdfDocument.fromFile()加载您的PDF - 使用
BookmarkManager - 使用
addBookMarkAtEnd("Title", pageNumber)添加书签 - 使用
pdf.saveAs()保存PDF
:title=Quickstart
//: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"));
:title=Quickstart
//: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"));
PDF书签改善了文档的可用性和导航。 大纲提供了PDF内部的结构化导航,使用户可以直接跳转到关键部分,就像目录一样。 这在处理需要组织导航的长篇文档、报告或多章节PDF时至关重要。
IronPDF for Java 简化了 Java 应用程序中的 PDF 操作。 书签API为您提供了创建PDF文件自定义书签的简单方法。 该库与Java应用结合,还支持除书签外的各种PDF处理功能,包括合并PDF、创建表单,添加水印。
如何添加PDF书签和大纲
- 安装Java库以在PDF中添加书签
- 使用PdfDocument类在Java中加载现有PDF文件
- 使用BookmarkManager类创建和自定义书签
- 使用
addBookMarkAtEnd为 PDF 的特定页面添加书签 - 保存包含新目录和书签的 PDF 文档
开始之前我需要什么?
在实现PDF书签之前,请确认IronPDF已在您的Java项目中配置。 该库需要Java 8或更高版本,并通过Maven或Gradle集成。 将IronPDF依赖项添加到项目的构建文件中。有关详细设置说明,请参阅快速入门概述。
开发和生产使用需要有效的许可证密钥。 在调用任何IronPDF方法之前,在应用程序开头设置许可证密钥。 有关许可选项的信息,请访问许可指南。
如何向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"));
}
}
//: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"));
}
}
在上方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"));
}
}
//: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"));
}
}
上面的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());
}
}
}
//: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());
}
}
}
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"));
}
}
//: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"));
}
}
addChildBookmark方法将新条目放置在更深一级,嵌套在所选书签下。 这两种方法都接受标题字符串和零基页面索引。
Java中的PDF书签的下一步是什么?
PDF书签为用户提供了一个直接的导航路径,通过复杂文档而无需滚动。 IronPDF的BookmarkManager处理了完整的书签操作范围:添加平面条目列表、建立深层多层大纲、检索现有条目以及在特定位置插入。
要继续研究文档结构和导航功能,请探索这些相关资源:
- 在Java中拆分PDF:创建更小的、包含自己书签结构的独立文档
- 在Java中打印PDF:将带书签的文件发送到打印机,并保留导航
- Java PDF教程:常见PDF工作流程的端到端示例
- 在Java中添加PDF注释:将注释和标记附加到特定页面位置
- IronPDF for Java示例:复制粘贴代码示例来完整使用IronPDF Java API
开始您的免费试用,将书签、大纲和其他导航功能添加到您的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)在其下嵌套一个新条目。


