如何在 Python 中使用 PDFMiner 获取 PDF 文件的总页数?

How can I get the total count of total pages of a PDF file using PDFMiner in Python?

在 PyPDF 2 中,pdfreader.getNumPages() 给出了 PDF 文件的总页数。

如何使用 PDFMiner 获取此信息?

使用 pdfminerimport 必要的模块。

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage

创建与文件对象关联的 PDF 解析器对象。

fp = open('your_file.pdf', 'rb')
parser = PDFParser(fp)

创建一个存储文档结构的 PDF 文档对象。

document = PDFDocument(parser)

迭代 create_pages() 函数,每次有一个页面时递增。

num_pages = 0
for page in PDFPage.create_pages(document):
    num_pages += 1
print(num_pages)

我不想只留下代码片段。对于上下文,这里有一个 link to the current pdfminer.six repo,您可以在其中了解更多关于 resolve1 方法的信息。

当您使用 PDFMiner 时,您可能会打印并遇到一些 PDFObjRef 对象。本质上,您可以使用 resolve1 来扩展这些对象(它们通常是字典)。

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import resolve1

file = open('some_file.pdf', 'rb')
parser = PDFParser(file)
document = PDFDocument(parser)

# This will give you the count of pages
print(resolve1(document.catalog['Pages'])['Count'])

我发现 PDFMiner 获取总页数的速度非常慢。我发现这是一个更干净、更快速的解决方案:

pip3 install PyPDF2

from PyPDF2 import PdfFileReader

def get_pdf_page_count(path):
  with open(path, 'rb') as fl:
    reader = PdfFileReader(fl)
    return reader.getNumPages()

使用pdfminer.six你只需要导入高级函数extract_pages,将生成器转换成一个列表并获取它的长度。

from pdfminer.high_level import extract_pages

print(len(list(extract_pages(pdf_file))))

我知道您要的是 PDFMiner。但是,通过 Google 搜索此问题的人可能也对 PDFMiner 的替代品感兴趣。

派克

Docs

from pikepdf import Pdf
pdf_doc = Pdf.open('fourpages.pdf')
pdf_page_count = len(pdf_doc)