• python 读取pdf文本内容


    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    # pip3 install pdfminer3k
     
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LAParams, LTTextBoxHorizontal
    from pdfminer.pdfparser import PDFParser, PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
    from pdfminer.pdfdevice import PDFDevice
    
    def read_pdf(pdf_name, result_name):
        # 以二进制读模式打开
        fp = open(pdf_name, 'rb')
        # 用文件对象来创建一个pdf文档分析器
        parser = PDFParser(fp)
        # 创建一个pdf文档
        doc = PDFDocument()
        # 连接分析器 与文档对象
        parser.set_document(doc)
        doc.set_parser(parser)
        # 提供初始密码,如果没有密码 就创建一个空的字符串
        doc.initialize('')
        # 检测文档是否提供txt转换,不提供就抛出异常
        if not doc.is_extractable:
            raise PDFTextExtractionNotAllowed
        # 创建PDf 资源管理器 来管理共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        
        with open(result_name,"w",encoding="u8") as fd_out:
            # 循环遍历列表,每次处理一个page的内容
            for i,page in enumerate(doc.get_pages(),1):
                index = "===========《第{}页》===========".format(i)
                print(index)
                fd_out.write(index + "
    ")
                interpreter.process_page(page)
                # 接受该页面的LTPage对象
                layout = device.get_result()
                for x in layout:
                    # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, 
                    # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性
                    if not isinstance(x, LTTextBoxHorizontal):
                        continue
                    results = x.get_text()
                    print(results)
                    fd_out.write(results)    
    
                            
    
    if __name__ == '__main__':
        pdf_name = 'test.pdf'
        result = 'test.txt'
        read_pdf(pdf_name, result)
    

      

  • 相关阅读:
    【leetcode】修剪二叉搜索树
    053-621
    053-620
    053-619
    053-618
    053-617
    053-616
    053-615
    053-614
    053-613
  • 原文地址:https://www.cnblogs.com/boye169/p/13861753.html
Copyright © 2020-2023  润新知