使用 pdfminer.six 检测垂直文本元素(不仅仅是文本内容)
Detecting vertical text elements (not just text content) with pdfminer.six
我在尝试检测 pdfminer.six 中的垂直文本元素时遇到了一个简单的问题。使用如下代码片段,我可以毫无问题地阅读垂直文本:
output_string = StringIO()
with open('../example_files/example1.pdf', 'rb') as infi:
parser = PDFParser(infi)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = TextConverter(rsrcmgr, output_string, laparams=LAParams(detect_vertical=True, all_texts=True))
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
print(output_string.getvalue())
但是,每当我尝试使用 PDFPageAggregator 而不是 TextConverter 以便我可以获得对象时,就像这样:
with open('../example_files/example1.pdf', 'rb') as infi:
parser = PDFParser(infi)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = PDFPageAggregator(rsrcmgr, laparams=LAParams(detect_vertical=True, all_texts=True))
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
for element in page_layout:
print(element)
我将捕获水平文本框(以及线条、矩形等),但不会捕获垂直文本。有没有办法让我在对象层次结构级别捕获垂直文本,以便我可以检查它的位置?
我花了一段时间才弄明白这一点,但关键是意识到文本元素可以是 LTImage 对象的子元素。我没有意识到这一点,也没有意识到我需要递归迭代 LTImage 对象的子对象才能找到所有内容。
我在尝试检测 pdfminer.six 中的垂直文本元素时遇到了一个简单的问题。使用如下代码片段,我可以毫无问题地阅读垂直文本:
output_string = StringIO()
with open('../example_files/example1.pdf', 'rb') as infi:
parser = PDFParser(infi)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = TextConverter(rsrcmgr, output_string, laparams=LAParams(detect_vertical=True, all_texts=True))
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
print(output_string.getvalue())
但是,每当我尝试使用 PDFPageAggregator 而不是 TextConverter 以便我可以获得对象时,就像这样:
with open('../example_files/example1.pdf', 'rb') as infi:
parser = PDFParser(infi)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = PDFPageAggregator(rsrcmgr, laparams=LAParams(detect_vertical=True, all_texts=True))
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
for element in page_layout:
print(element)
我将捕获水平文本框(以及线条、矩形等),但不会捕获垂直文本。有没有办法让我在对象层次结构级别捕获垂直文本,以便我可以检查它的位置?
我花了一段时间才弄明白这一点,但关键是意识到文本元素可以是 LTImage 对象的子元素。我没有意识到这一点,也没有意识到我需要递归迭代 LTImage 对象的子对象才能找到所有内容。