Перемещайтесь между текстовым полем, используя PDFMiner - PullRequest
1 голос
/ 16 февраля 2020

Я ссылаюсь на код, предоставленный 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):
            print(lt_obj.get_text())
        elif isinstance(lt_obj, LTFigure):
            parse_layout(lt_obj)  # Recursive


fp = open(r'C:\Users\lucas\Desktop\XX.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)

Этот код способен читать и распечатывать макет документов. Например,

LTTextBoxHor horizontal (21.36, 452.28479999999996, 96.2544, 461.74559999999997) MARKS AND NUMBER

Я специально фильтрую только текстовые поля для печати. Мне было интересно, есть ли вообще возможность печатать определенные c текстовые поля или перемещаться по текстовым полям. Например, я хочу напечатать 3-е поле сверху или 5-е поле из текущего текстового поля.

Буду очень признателен, если кто-нибудь сможет помочь! :)

...