from typing import List
from PyPDF2 import PdfFileReader
from PyPDF2.generic import Destination
def get_outlines(pdf_filepath: str) -> List[Destination]:
"""Get the bookmarks of a PDF file."""
with open(pdf_filepath, "rb") as fp:
pdf_file_reader = PdfFileReader(fp)
outlines = pdf_file_reader.getOutlines()
return outlines
print(get_outlines("PDF-export-example.pdf"))
字符串pyPdf.pdf.Destination
有很多属性,但我找不到该书签的引用页码。我如何获得书签的页码?
例如,outlines[1].page.idnum
返回的数字大约是PDF文档中引用的页码的3倍,我假设引用的对象比页面小,因为在整个PDF文档大纲上运行.page.idnum
返回的数字数组甚至与PDF文档中的“真实的”页码目标不线性相关,并且大约是3倍
更新:这个问题和这个一样:split a pdf based on outline虽然我不明白作者在他的自我回答中做了什么。对我来说似乎太复杂了,无法使用
4条答案
按热度按时间7fyelxc51#
正如@theta指出的,“split a pdf based on outline“有提取页码所需的代码。如果你觉得这很复杂,我复制了部分将页面idMap到页码的代码,并将其变成一个函数。下面是一个打印书签o[0]页码的工作示例:
字符串
可能太晚了@theta,但可能会帮助别人:)顺便说一句,我的第一个职位上stackoverflow,所以请原谅我,如果我没有遵循通常的格式
**为了进一步扩展:**如果您正在寻找书签在页面上的确切位置,这将使您的工作更容易:
型
注:我的书签是章节号(例如:1.1简介),我将书签信息Map到章节号。如果您的书签不同,请修改这部分代码:
型
vjrehmav2#
使用vjayky和Giulio D建议递归管理书签。
PyPDF2 >= v1.25
字符串
PyPDF2 < v1.25
型
示例输出(两种方法):
型
iaqfqrcu3#
在2019年,对于那些对更快的方式感兴趣的人来说,可以用途:
字符串
ulmd4ohb4#
我不确定,但根据pypdf.Destination的文档,书签的页码只是Destination.page。