【发布时间】:2012-09-18 06:46:15
【问题描述】:
我已经尝试使用 pyPdf 和 pdfMiner 从 pdf 文件中提取文本。我有一些不友好的 pdf,只有 pdfMiner 能够成功提取。我正在使用代码here 来提取整个文件的文本。但是,我真的很想按页面提取文本,例如 pyPdf 中的getPage(i).extractText() 功能。有谁知道如何使用 pdfMiner 提取每页的文本?
【问题讨论】:
我已经尝试使用 pyPdf 和 pdfMiner 从 pdf 文件中提取文本。我有一些不友好的 pdf,只有 pdfMiner 能够成功提取。我正在使用代码here 来提取整个文件的文本。但是,我真的很想按页面提取文本,例如 pyPdf 中的getPage(i).extractText() 功能。有谁知道如何使用 pdfMiner 提取每页的文本?
【问题讨论】:
for pageNumber, page in enumerate(PDFDocument.get_pages()):
if pageNumber == 42:
#do something with the page
有一篇不错的文章here。
【讨论】:
pdfminer 的哪个版本?
这是您将所有页面写入单独文件的方式:
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 替换为您想要的页码。
【讨论】: