如何在 Java 中新增 PDF 書籤與大綱

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

IronPDF 的 Java 函式庫讓您能透過 BookmarkManager 類別,以程式化方式在 PDF 文件中新增書籤與大綱,並支援單層與多層書籤結構,以及可自訂的導覽點。

快速入門:在 Java 中新增 PDF 書籤

  1. 安裝 IronPDF Java 函式庫並設定您的授權金鑰
  2. 使用 PdfDocument.fromFile() 載入您的 PDF
  3. 取得 BookmarkManagerpdf.getBookmark()
  4. 使用 addBookMarkAtEnd("Title", pageNumber) 添加書籤
  5. 儲存 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"));
    }
}
JAVA

上方的 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());
        }
    }
}
JAVA

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

請注意當合併兩個書籤名稱完全相同的 PDF 檔案時,合併後的書籤清單可能會出現預期之外的行為。 在合併前請先重新命名衝突的書籤,以維持大綱的整潔。)}]

addNextBookmark 方法會將新項目插入為選取書籤的同級項目,並在清單中緊接其後。addChildBookmark 方法則會將新項目置於更深一層,嵌套在選取書籤之下。 這兩種方法皆接受標題字串及以零為起點的頁面索引。

Java 中 PDF 書籤的下一步是什麼?

PDF 書籤讓使用者無需捲動頁面,即可透過複雜文件進行直接導航。 IronPDF 的 BookmarkManager 可處理完整的書籤操作:新增平面條目清單、建立深層多層級大綱、檢索現有條目,以及在特定位置插入書籤。

若要進一步了解文件結構與導覽功能,請參閱以下相關資源:

立即開始免費試用,為您的 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) 將新項目嵌套在其下方。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

準備開始了嗎?
版本: 2026.5 just released
Still Scrolling Icon

還在捲動嗎?

想要快速證明?
執行範例 觀看您的 HTML 變成 PDF。