PDFMinerのドキュメントによると:
PDFMinerを使用すると、ページ内のテキストの正確な位置を取得できます
しかし、私はこれを行う方法を見つけることができませんでした。 PDFMinerの「ドキュメント」はかなりまばらなので、これを行う方法がわかりません。
すべてのレイアウトオブジェクトでbbox
プロパティを探しています。 PDFMinerのドキュメントには レイアウト階層の解析方法 に関する情報が少しありますが、すべてを網羅しているわけではありません。
次に例を示します。
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
とLTFigure
の子レイアウトオブジェクトに再帰的に解析できます。 ] _上記の例では。