在 Python 中获取、更新和展开 PDF 书签
获取书签
这 文档 对象的 OutlineCollection collection 包含 PDF 文件的所有书签。本篇文章解释了如何从 PDF 文件获取书签,以及如何获取特定书签所在的页面。
要获取书签,遍历 OutlineCollection 集合,并在 OutlineItemCollection 中获取每个书签。 OutlineItemCollection 提供访问所有书签属性的功能。以下代码片段展示了如何从 PDF 文件中获取书签。
from os import path
import sys
import aspose.pdf as ap
def get_bookmarks(input_pdf):
document = ap.Document(input_pdf)
for i in range(len(document.outlines)):
outline_item = document.outlines[i + 1]
print(outline_item.title)
print(outline_item.italic)
print(outline_item.bold)
print(outline_item.color)
获取书签的页面编号
添加书签后,您可以通过获取与 Bookmark 对象关联的目标 PageNumber 来确定它所在的页码。
from os import path
import sys
import aspose.pdf as ap
def get_bookmark_page_number(input_pdf):
# Create PdfBookmarkEditor
bookmark_editor = ap.facades.PdfBookmarkEditor()
# Open PDF file
bookmark_editor.bind_pdf(input_pdf)
# Extract bookmarks
bookmarks = bookmark_editor.extract_bookmarks()
for bookmark in bookmarks:
str_level_separator = ""
for i in range(bookmark.level):
str_level_separator += "----"
print(str_level_separator, "Title:", bookmark.title)
print(str_level_separator, "Page Number:", bookmark.page_number)
print(str_level_separator, "Page Action:", bookmark.action)
从 PDF 文档获取子书签
书签可以以层次结构组织,拥有父级和子级。要获取所有书签,遍历 Document 对象的 Outlines 集合。然而,要同时获取子书签,还需遍历每个在第一次循环中获得的对象的所有书签。 OutlineItemCollection 在第一次循环中获取的对象。以下代码片段展示了如何从 PDF 文档中获取子书签。
from os import path
import sys
import aspose.pdf as ap
def get_child_bookmarks(input_pdf):
document = ap.Document(input_pdf)
for i in range(len(document.outlines)):
outline_item = document.outlines[i + 1]
print(outline_item.title)
print(outline_item.italic)
print(outline_item.bold)
print(outline_item.color)
count = len(outline_item)
if count > 0:
print("Child Bookmarks")
# There are child bookmarks then loop through that as well
for j in range(len(outline_item)):
child_outline_item = outline_item[j + 1]
print(child_outline_item.title)
print(child_outline_item.italic)
print(child_outline_item.bold)
print(child_outline_item.color)
在 PDF 文档中更新书签
要更新 PDF 文件中的书签,首先通过指定书签的索引,从 Document 对象的 OutlineColletion 集合中获取特定书签。检索到书签后,将其 OutlineItemCollection 对象后,您可以更新其属性,然后使用 Save 方法保存更新后的 PDF 文件。以下代码片段展示了如何在 PDF 文档中更新书签。
from os import path
import sys
import aspose.pdf as ap
def update_bookmarks(input_pdf, output_pdf):
# Open document
document = ap.Document(input_pdf)
# Get a bookmark object
outline = document.outlines[1]
# Get child bookmark object
child_outline = outline[1]
child_outline.title = "Updated Outline"
child_outline.italic = True
child_outline.bold = True
# Save output
document.save(output_pdf)
在查看文档时展开书签
书签存放在 Document 对象的 OutlineItemCollection 集合本身在 OutlineCollection 集合。不过,我们可能需要在查看 PDF 文件时将所有书签展开。
为了实现此需求,我们可以将每个大纲/书签项的打开状态设置为 Open。下面的代码片段展示了如何在 PDF 文档中将每个书签的打开状态设置为展开。
from os import path
import sys
import aspose.pdf as ap
def expanded_bookmarks(input_pdf, output_pdf):
document = ap.Document(input_pdf)
document.page_mode = ap.PageMode.USE_OUTLINES
for i in range(len(document.outlines)):
item = document.outlines[i + 1]
item.open = True
document.save(output_pdf)