如何在 Java 中新增 PDF 書籤與大綱
IronPDF 的 Java 函式庫讓您能透過 BookmarkManager 類別,以程式化方式在 PDF 文件中新增書籤與大綱,並支援單層與多層書籤結構,以及可自訂的導覽點。
快速入門:在 Java 中新增 PDF 書籤
- 安裝 IronPDF Java 函式庫並設定您的授權金鑰
- 使用
PdfDocument.fromFile()載入您的 PDF - 取得
BookmarkManager與pdf.getBookmark() - 使用
addBookMarkAtEnd("Title", pageNumber)添加書籤 - 儲存 PDF 檔案
pdf.saveAs()
```java :title=快速入門 //: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("第 1 章", 0); pdf.saveAs(Path.of("bookmarked.pdf"));
PDF 書籤可提升文件的易用性與導覽功能。 大綱可在 PDF 文件中提供結構化的導覽功能,讓使用者能直接跳至關鍵段落,其作用類似於目錄。 這在處理長篇文件、報告或需要有條理導覽的多章節 PDF 時,尤為重要。
IronPDF 簡化了 Java 應用程式中的 PDF 處理流程。 書籤 API 提供直觀的方法,讓您能在 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>使用 <strong>PdfDocument</strong> 類別在 Java 中載入現有 PDF 檔案</li>
<li>使用 <strong>BookmarkManager</strong> 類別建立並自訂書籤</li>
<li>使用 <code>addBookMarkAtEnd</code> 功能在 PDF 的特定頁面添加書籤</li>
<li>儲存包含新大綱與書籤的 PDF 文件</li>
</ol>
</div>
## 開始之前需要準備什麼?
在實作 PDF 書籤之前,請確認您的 Java 專案中已設定 IronPDF。 此函式庫需使用 Java 8 或更高版本,並可透過 [Maven 或 Gradle](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf) 進行整合。 請將 IronPDF 依賴項新增至專案的建置檔案中。如需詳細的設定說明,請參閱《[入門指南](https://ironpdf.com/java/docs/)》。
開發與生產環境的使用均需有效的授權金鑰。 在呼叫任何 IronPDF 方法之前,請先於應用程式開頭設定授權金鑰。 有關授權選項的資訊,請參閱[授權指南](https://ironpdf.com/java/get-started/license-keys/)。
提示IronPDF 中的所有頁面索引均採用從零開始的編號。 (您的文件第 1 頁對應索引 0,第 2 頁對應索引 1,依此類推。
## 如何在 PDF 中新增大綱和書籤?
以下範例使用此[範例 PDF](/static-assets/ironpdf-java/howto/bookmarks/NovelSample.pdf) [檔案](/static-assets/ironpdf-java/howto/bookmarks/NovelSample.pdf),展示大綱與書籤的建立方式。 該流程包含載入現有 PDF 文件,並使用 IronPDF 的 `BookmarkManager` 功能在文件中各處添加導覽點。
### 如何新增單層書籤?
扁平式書籤清單適用於結構清晰且無層級的文件:例如報告、產品手冊或簡報,其中每個區段皆為獨立單元。 使用 `PdfDocument.fromFile()` 從檔案路徑載入 PDF 後,請取得 `BookmarkManager` 物件以開始新增書籤。
`addBookMarkAtEnd` 和 `addBookMarkAtStart` 方法分別用於將項目新增至書籤集合的末尾或開頭。 這些方法讓您能靈活地組織書籤,使其與文件的結構相符。 每個條目包含一個顯示標題和一個以零為起點的頁面索引。
```java
//: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 方法接受四個參數:書籤名稱、目標頁面索引、父書籤名稱以及前一個同級書籤名稱。 傳入父級書籤名稱將在其下方建立一個嵌套的子項目。 將 sibling 參數設定為 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 介面,讓使用者能輕鬆達成此功能。 載入 PDF 檔案時使用 PdfDocument.fromFile(),存取 BookmarkManager,然後呼叫 getBookmarks() 以擷取所有頂層書籤。
使用 get(index) 可根據書籤在清單中的位置存取特定書籤。getText() 方法會傳回書籤的顯示標籤,而 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 文件是在處理流程中產生或修改,且下游會追加新內容時,此功能特別實用。
使用 getBookmarks() 取得平面書籤清單,根據清單索引選取目標書籤,然後呼叫 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"));
}
}
addNextBookmark 方法會將新項目插入為選取書籤的同級項目,並在清單中緊接其後。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 文件新增書籤?
請使用PDF/A格式 PdfDocument.fromFile(),然後呼叫 pdf.getBookmark() 以取得 BookmarkManager。使用 addBookMarkAtEnd("Title", pageIndex) ,依顯示名稱與零起始頁碼新增每個書籤,最後儲存為 pdf.saveAs().
在 Java 中新增 PDF 書籤有哪些先決條件?
您需要 Java 8 或更高版本,並將 IronPDF 函式庫作為 Maven 或 Gradle 依賴項加入,同時在 License.setLicenseKey() ,方能進行任何 IronPDF 呼叫。無需其他工具或框架。
我可以在 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().
如何在特定現有書籤之後插入新書籤?
using getBookmarks(),透過索引選取目標項目,接著呼叫 bookmark.addNextBookmark("Title", pageIndex) 在該條目後方立即插入同級條目,或 bookmark.addChildBookmark("Title", pageIndex) 將新項目嵌套在其下方。


