PyPDF2:提取 contents/outlines 的 table 及其页码

PyPDF2 : extract table of contents/outlines and their page number

我正在尝试使用 Python (PyPDF2) 从 PDF 及其页码中提取 TOC/outlines,我知道 reader.outlines 但它没有 return 正确的页码。

PDF 示例:https://www.annualreports.com/HostedData/AnnualReportArchive/l/NASDAQ_LOGM_2018.pdf

并且 reader.outlines 的输出是:

[{'/Title': '2018 Highlights', '/Page': IndirectObject(5, 0), '/Type': '/Fit'},
{'/Title': 'Letter to Stockholders', '/Page': IndirectObject(6, 0), '/Type': '/Fit'}, 
...
{'/Title': 'Part I', '/Page': IndirectObject(10, 0), '/Type': '/Fit'}, 
[{'/Title': 'Item 1. Business', '/Page': IndirectObject(10, 0), '/Type': '/Fit'}, 
{'/Title': 'Item 1A. Risk Factors', '/Page': IndirectObject(19, 0), '/Type': '/Fit'}
...

例如,PART 我不应该从第 10 页开始,我是不是漏掉了什么? 有人有替代品吗?

我尝试过使用 PyMupdf、Tabula 和 getDestinationPageNumber 方法,但没有成功。

提前致谢。

查看名为 Tabula 的包。使用这个包提取表格真的很容易。该软件包还具有使您能够从延伸到多个页面的表格中提取内容的选项。

这里 link 值得一看:- https://towardsdatascience.com/scraping-table-data-from-pdf-files-using-a-single-line-in-python-8607880c750

Martin Thoma's answer 正是我所需要的 (PyMuPDF)。 Diblo Dk's answer 也是一个有趣的解决方法 (PyPDF2)。

我引用的正是 Martin Thoma 的代码:

from typing import Dict

import fitz  # pip install pymupdf


def get_bookmarks(filepath: str) -> Dict[int, str]:
    # WARNING! One page can have multiple bookmarks!
    bookmarks = {}
    with fitz.open(filepath) as doc:
        toc = doc.getToC()  # [[lvl, title, page, …], …]
        for level, title, page in toc:
            bookmarks[page] = title
    return bookmarks


print(get_bookmarks("my.pdf"))