PDFMiner的文档说:
PDFMiner允许人们获取页面中文本的确切位置
但是,我还没有找到如何做到这一点。 PDFMiner的'文档'相当稀疏,所以我不明白如何做到这一点。
答案 0 :(得分:16)
您正在寻找每个布局对象上的bbox
属性。 PDFMiner文档中有关于how to parse the layout hierarchy的一些信息,但它并未涵盖所有内容。
以下是一个例子:
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure
def parse_layout(layout):
"""Function to recursively parse the layout tree."""
for lt_obj in layout:
print(lt_obj.__class__.__name__)
print(lt_obj.bbox)
if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
print(lt_obj.get_text())
elif isinstance(lt_obj, LTFigure):
parse_layout(lt_obj) # Recursive
fp = open('example.pdf', 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
parse_layout(layout)
如果您对单个LTChar
对象的位置感兴趣,可以递归地解析为LTTextBox
和LTTextLine
的子布局对象,就像对{{1}所做的那样在上面的例子中。