如何在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. 使用pdf.getBookmark()
  4. 使用addBookMarkAtEnd("Title", pageNumber)新增書籤
  5. 使用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"));
JAVA

PDF書籤提升了文件的可用性和導航便利性。 大綱在PDF內提供了結構化的導航,讓使用者可以直接跳至關鍵部分,就像目錄一樣。 在處理需要有組織導航的長文件、報告或多章節PDF時,這顯得尤為重要。

IronPDF簡化了在Java應用程式中操控PDF的過程。 書籤API提供了建立自訂PDF書籤的簡單方法。 該程式庫可與Java應用程式整合,並支持除書籤以外的多種PDF操作功能,包括合併PDF建立表單加入浮水印

開始之前我需要什麼準備?

在執行PDF書籤之前,確認IronPDF已在您的Java專案中配置。 該程式庫需要Java 8或更高版本,並透過Maven或Gradle整合。 將IronPDF依賴項新增到您專案的構建文件中。有關詳細設置說明,請參閱入門概覽

開發和生產使用需要有效的授權金鑰。 在調用任何IronPDF方法之前,請在應用程式開頭設置授權金鑰。 有關授權選項的資訊,請存取授權指南

提示IronPDF中的全部頁面索引使用從0開始的編號。 文件的第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"));
    }
}
//: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"));
    }
}
//: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建立的書籤樹狀結構。 展開大綱面板以驗證每個子條目如何巢狀在其父條目下。 這種分層方法適合有章節、副章節和附錄的報告。


Icon Quote related to 如何建立多層次書籤?

我最喜歡的程式庫是IronPDF。它允許快速高效地操作PDF文件。它還有許多有價值的功能,例如導出到PDF/A格式和數位簽署PDF文件。

Milan Jovanovic related to 如何建立多層次書籤?

Milan Jovanovic

Microsoft MVP

查看案例研究
Icon Quote related to 如何建立多層次書籤?

IronOCR意味著我們每年可以從手動處理中節省$40,000,同時提高生產力,釋放資源以進行高影響的任務。我會強烈推薦它。

Brent Matzelle related to 如何建立多層次書籤?

Brent Matzelle

首席技術官,OPYN

查看案例研究
Icon Quote related to 如何建立多層次書籤?

IronSuite在我們的運營中扮演著至關重要的角色。這些工具增加了包括建立平面圖和改善庫存管理在內的業務效率。

David Jones related to 如何建立多層次書籤?

David Jones

首席軟體工程師,Agorus Build

查看案例研究

如何從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());
        }
    }
}
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"));
    }
}
//: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 文件新增書籤?

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) 在其下巢狀新條目。

Darrius Serrant
全端軟體工程師(WebOps)

Darrius Serrant擁有邁阿密大學的電腦科學學士學位,並在Iron Software擔任全端WebOps行銷工程師。從小就對程式設計有興趣,他認為計算既神秘又易於理解,成為創意和問題解決的完美媒介。

在Iron Software,Darrius喜歡創造新事物並簡化複雜的概念,使其更易於理解。作為我們的常駐開發人員之一,他還志願教學,將他的專業知識傳授給下一代。

對Darrius來說,他的工作是有意義的,因為它有價值且對社會有真正的影響。

準備好開始了嗎?
版本: 2026.6 剛剛發布
Still Scrolling Icon

還在滾動嗎?

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