在 Java 中获取、更新和展开 PDF 书签

Aspose.PDF for Java 通过文档大纲模型以及 PdfBookmarkEditor 立面。

获取书签属性

当您需要检查文档大纲中的顶级书签条目时,请使用此示例。

  1. 打开源 PDF Document。
  2. 遍历大纲集合。
  3. 读取并打印书签的标题、样式和颜色值。
public static void getBookmarks(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (int i = 1; i <= document.getOutlines().size(); i++) {
            OutlineItemCollection outlineItem = document.getOutlines().get_Item(i);
            System.out.println(outlineItem.getTitle());
            System.out.println(outlineItem.getItalic());
            System.out.println(outlineItem.getBold());
            System.out.println(outlineItem.getColor());
        }
    }
}

获取书签页码

此示例使用 PdfBookmarkEditor 提取书签标题、层级、页码和动作。

  1. 将源 PDF 绑定到 PdfBookmarkEditor。
  2. 提取书签集合并遍历它。
  3. 打印每个书签的级别、标题、页码和操作信息。
public static void getBookmarkPageNumber(Path inputFile) {
    PdfBookmarkEditor bookmarkEditor = new PdfBookmarkEditor();
    try {
        bookmarkEditor.bindPdf(inputFile.toString());
        for (Bookmark bookmark : bookmarkEditor.extractBookmarks()) {
            String levelSeparator = "";
            for (int i = 0; i < bookmark.getLevel(); i++) {
                levelSeparator += "----";
            }

            System.out.println(levelSeparator + " Title: " + bookmark.getTitle());
            System.out.println(levelSeparator + " Page Number: " + bookmark.getPageNumber());
            System.out.println(levelSeparator + " Page Action: " + bookmark.getAction());
        }
    } finally {
        bookmarkEditor.close();
    }
}

获取子书签

当您需要检查顶层和嵌套的大纲项时,请使用此示例。

  1. 打开源 PDF Document。
  2. 遍历顶层大纲并打印其属性。
  3. 检测子书签,然后遍历它们并打印其属性。
public static void getChildBookmarks(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (int i = 1; i <= document.getOutlines().size(); i++) {
            OutlineItemCollection outlineItem = document.getOutlines().get_Item(i);
            System.out.println(outlineItem.getTitle());
            System.out.println(outlineItem.getItalic());
            System.out.println(outlineItem.getBold());
            System.out.println(outlineItem.getColor());
            int count = outlineItem.size();
            if (count > 0) {
                System.out.println("Child Bookmarks");
                for (int j = 1; j <= outlineItem.size(); j++) {
                    OutlineItemCollection childOutlineItem = outlineItem.get_Item(j);
                    System.out.println(childOutlineItem.getTitle());
                    System.out.println(childOutlineItem.getItalic());
                    System.out.println(childOutlineItem.getBold());
                    System.out.println(childOutlineItem.getColor());
                }
            }
        }
    }
}

更新书签

当需要修改现有书签标题和样式时,请使用此示例。

  1. 打开源 PDF Document。
  2. 访问目标大纲项及其子书签。
  3. 更新书签属性并保存文档。
public static void updateBookmarks(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        OutlineItemCollection outline = document.getOutlines().get_Item(1);
        OutlineItemCollection childOutline = outline.get_Item(1);
        childOutline.setTitle("Updated Outline");
        childOutline.setItalic(true);
        childOutline.setBold(true);

        document.save(outputFile.toString());
    }
}

默认展开书签

当文档显示时,书签面板应打开并显示展开的目录项时,请使用此示例。

  1. 打开源 PDF Document。
  2. 将页面模式设置为使用大纲,并将每个大纲项标记为打开状态。
  3. 保存已更新的文档。
public static void expandedBookmarks(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setPageMode(PageMode.UseOutlines);
        for (int i = 1; i <= document.getOutlines().size(); i++) {
            OutlineItemCollection item = document.getOutlines().get_Item(i);
            item.setOpen(true);
        }
        document.save(outputFile.toString());
    }
}