21

PDFMiner のドキュメントには次のように書かれています。

PDFMiner を使用すると、ページ内のテキストの正確な位置を取得できます

しかし、私はこれを行う方法を見つけることができませんでした。PDFMiner の「ドキュメント」はかなりまばらなので、これを行う方法がわかりません。

4

2 に答える 2

22

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の子レイアウト オブジェクトに再帰的に解析できます。LTTextBoxLTTextLineLTFigure

于 2014-08-12T10:53:28.520 に答える