如何从pdf中提取带有缩进的文本?

时间:2019-09-18 10:23:23

标签: python python-3.x pdfminer

我想从pdf文件中提取文本。但是,当我提取下面的代码时,返回的文本如下:

section text text text text text text text text
text text text text text text text text

但是我希望该部分带有普通的缩进:

                 Section
text text text text text text text text
text text text text text text text text

遵循示例:

import io

from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage

def extract_text_by_page(pdf_path):
    with open(pdf_path, 'rb') as fh:
        for page in PDFPage.get_pages(fh, 
                                      caching=True,
                                      check_extractable=True):
            resource_manager = PDFResourceManager()
            fake_file_handle = io.StringIO()
            converter = TextConverter(resource_manager, fake_file_handle)
            page_interpreter = PDFPageInterpreter(resource_manager, converter)
            page_interpreter.process_page(page)

            text = fake_file_handle.getvalue()
            yield text

            # close open handles
            converter.close()
            fake_file_handle.close()

def extract_text(pdf_path):
    for page in extract_text_by_page(pdf_path):
        print(page)
        print()

if __name__ == '__main__':
    print(extract_text('w9.pdf'))

是否可以使用pdfminer做到这一点?

1 个答案:

答案 0 :(得分:0)

TextConverter用于将pdf转换为纯文本,而不考虑元素的位置。其背后的原因是,即使使用等宽字体,也很难使用纯文本准确地呈现pdf中的文本位置。

HtmlConverterXMLConverter输出一个包含文本和文本位置的文件。也许您可以使用此输出来创建所需的结果。

如果您的需求更加具体,您也可以考虑编写自己的PDFConverter。这使您可以控制所有内容,包括页面的开始和结束,渲染图像,绘制多边形路径以及将文本写入特定位置。