获取、更新和展开书签使用Python

获取书签

Document 对象的 OutlineCollection 集合包含了 PDF 文件的所有书签。本文解释了如何从 PDF 文件中获取书签,以及如何获取特定书签所在的页面。

要获取书签,遍历 OutlineCollection 集合,并在 OutlineItemCollection 中获取每个书签。OutlineItemCollection 提供了对所有书签属性的访问。以下代码片段展示了如何从 PDF 文件中获取书签。


    import aspose.pdf as ap

    # 打开文档
    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)

获取书签的页码

添加书签后,可以通过获取与书签对象关联的目标页码来找出它所在的页面。


    import aspose.pdf as ap

    # 创建 PdfBookmarkEditor
    bookmarkEditor = ap.facades.PdfBookmarkEditor()
    # 打开 PDF 文件
    bookmarkEditor.bind_pdf(input_pdf)
    # 提取书签
    bookmarks = bookmarkEditor.extract_bookmarks()
    for bookmark in bookmarks:
        str_level_seprator = ""
        for i in range(bookmark.level):
            str_level_seprator += "----"

        print(str_level_seprator, "标题:", bookmark.title)
        print(str_level_seprator, "页码:", bookmark.page_number)
        print(str_level_seprator, "页面操作:", bookmark.action)

从 PDF 文档获取子书签

书签可以组织成具有父子关系的层次结构。 要获取所有书签,请遍历 Document 对象的 Outlines 集合。然而,要同时获取子书签,还需要遍历在第一次循环中获得的每个 OutlineItemCollection 对象中的所有书签。以下代码片段展示了如何从 PDF 文档中获取子书签。


    import aspose.pdf as ap

    # 打开文档
    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("子书签")
            # 有子书签则也遍历它们
            for j in range(len(outline_item)):
                child_outline_item = outline_item[i + 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 文档中更新书签。


    import aspose.pdf as ap

    # 打开文档
    document = ap.Document(input_pdf)

    # 获取书签对象
    outline = document.outlines[1]

    # 获取子书签对象
    child_outline = outline[1]
    child_outline.title = "Updated Outline"
    child_outline.italic = True
    child_outline.bold = True

    # 保存输出
    document.save(output_pdf)

查看文档时展开书签

书签保存在 Document 对象的 OutlineItemCollection 集合中,该集合本身在 OutlineCollection 集合中。 然而,我们可能需要在查看 PDF 文件时将所有书签展开。

为了实现这一要求,我们可以将每个大纲/书签项的打开状态设置为打开。以下代码段向您展示如何在 PDF 文档中将每个书签的打开状态设置为展开。


    import aspose.pdf as ap

    # 打开文档
    document = ap.Document(input_pdf)

    # 设置页面查看模式,即显示缩略图,全屏,显示附件面板
    document.page_mode = ap.PageMode.USE_OUTLINES
    # 遍历 PDF 文件的大纲集合中的每个大纲项
    for i in range(len(document.outlines)):
        item = document.outlines[i + 1]
        # 设置大纲项的打开状态
        item.open = True

    # 保存输出
    document.save(output_pdf)