使用pdfminer.fix检测垂直文本元素(而不仅仅是文本内容)



我在尝试检测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对象的子对象来查找所有内容。

相关内容

最新更新