如何在Java中新增PDF書籤和大綱
IronPDF的Java程式庫允許您透過BookmarkManager類別,以程式方式將書籤和大綱新增到PDF文件,支援單層和多層結構的書籤並具備可自訂的導航點。
快速入門:在Java中新增PDF書籤
- 安裝IronPDF Java程式庫並設置您的授權金鑰
- 使用
PdfDocument.fromFile()載入您的PDF - 使用
pdf.getBookmark() - 使用
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簡化了在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工作流程的其他端到端範例
- 在PDF中新增註釋:為特定頁面位置附上評論和標記
- IronPDF for Java範例:複製和粘貼整個IronPDF Java API的程式碼范例
開始您的免費試用,以將書籤、大綱和其他導航功能加至您的Java PDF工作流程中。 若要購買用於生產的授權,請查看授權選項。
常見問題
如何在 Java 中向 PDF 文件新增書籤?
using PdfDocument.fromFile() 載入您的 PDF,然後調用 pdf.getBookmark() 獲取 BookmarkManager。使用 addBookMarkAtEnd("Title", pageIndex) 按顯示名稱和從零開始的頁碼新增每個書籤,然後使用 pdf.saveAs() 保存。
在 Java 中新增 PDF 書籤的先決條件是什麼?
您需要 Java 8 或更高版本,將 IronPDF 程式庫新增為 Maven 或 Gradle 相依性,並在任何 IronPDF 調用之前使用 License.setLicenseKey() 設置有效的授權金鑰。無需額外的工具或框架。
我可以在 PDFs 中建立多級書籤層次結構嗎?
是的。首先使用 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() 存取。
如何在具體存在的書籤後插入書籤?
using getBookmarks() 獲取書籤列表,按索引選擇目標條目,然後調用 bookmark.addNextBookmark("Title", pageIndex) 立即在其後插入兄弟書籤,或使用 bookmark.addChildBookmark("Title", pageIndex) 在其下巢狀新條目。


