pdfminer的文档充其量是很差的。我最初使用的是pdfminer,并且可以处理某些PDF文件,然后遇到了一些错误,意识到我应该使用pdfminer.six
我想从PDF的每一页中提取文本,这样我就可以在找到特定单词等的地方保持标签。
使用文档:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
# Open a PDF file.
fp = open('mypdf.pdf', 'rb')
# Create a PDF parser object associated with the file object.
parser = PDFParser(fp)
# Create a PDF document object that stores the document structure.
# Supply the password for initialization.
document = PDFDocument(parser, password)
# Check if the document allows text extraction. If not, abort.
if not document.is_extractable:
raise PDFTextExtractionNotAllowed
# Create a PDF resource manager object that stores shared resources.
rsrcmgr = PDFResourceManager()
# Create a PDF device object.
device = PDFDevice(rsrcmgr)
# Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr, device)
# Process each page contained in the document.
for page in PDFPage.create_pages(document):
interpreter.process_page(page)
我们已经解析了所有页面,但是没有关于如何从PDF页面获取元素或任何内容的文档
我通过PDFPage.py文件寻找了一种从每个PDF页面提取文本的方法,当然,它并不是那么简单。
使事情复杂化的是,至少有3个版本的pdfminer,并且随着时间的推移当然已经进行了升级,因此我可以找到的任何示例都不兼容。
最佳答案
这是我用来从pdf文件提取文本的版本。
import io
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage
def extract_text_from_pdf(pdf_path):
"""
This function extracts text from pdf file and return text as string.
:param pdf_path: path to pdf file.
:return: text string containing text of pdf.
"""
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle)
page_interpreter = PDFPageInterpreter(resource_manager, converter)
with open(pdf_path, 'rb') as fh:
for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
page_interpreter.process_page(page)
text = fake_file_handle.getvalue()
# close open handles
converter.close()
fake_file_handle.close()
if text:
return text
return None
关于python - 使用pdfminer.six从每个PDF页面提取文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52506043/