12

我已经尝试使用 pyPdf 和 pdfMiner 从 pdf 文件中提取文本。我有一些不友好的 pdf,只有 pdfMiner 能够成功提取。我在这里使用代码来提取整个文件的文本。但是,我真的很想提取每页的文本,就像getPage(i).extractText()pyPdf 中的功能一样。有谁知道如何使用 pdfMiner 提取每页的文本?

4

2 回答 2

13
for pageNumber, page in enumerate(PDFDocument.get_pages()):
    if pageNumber == 42:
        #do something with the page

这里有一篇不错的文章。

于 2012-09-26T18:19:34.937 回答
8

这是您将所有页面写入单独文件的方式:

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter, HTMLConverter, TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfparser import PDFParser
import io
import os

fp = open('Files/Company_list/0010/pdf_files/testfile3.pdf', 'rb')
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
print(type(retstr))
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)

page_no = 0
for pageNumber, page in enumerate(PDFPage.get_pages(fp)):
    if pageNumber == page_no:
        interpreter.process_page(page)

        data = retstr.getvalue()

        with open(os.path.join('Files/Company_list/0010/text_parsed/2017AR', f'pdf page {page_no}.txt'), 'wb') as file:
            file.write(data.encode('utf-8'))
        data = ''
        retstr.truncate(0)
        retstr.seek(0)

    page_no += 1

如果您需要特定的页码,只需将 page_no 替换为您想要的页码。

于 2018-07-21T15:21:57.547 回答