zoukankan      html  css  js  c++  java
  • python解析pdf代码

    #!/usr/bin/env python3
    # -*- coding:utf-8 -*-
    # pip3 install pdfminer3k
    
    import os
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LAParams, LTTextBoxHorizontal
    from pdfminer.pdfparser import PDFParser, PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowed
    
    
    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__':
    
        # 获取读取文件夹
        filePath = 'static/PDFfile'
        # 遍历文件夹
        for i, j, k in os.walk(filePath):
            for m in k:
                # 格式化输出的名称和地址
                dire = 'static/TextFile/'
                result = dire + m[:-4] + '.txt'
                if not os.path.exists(dire):
                    os.makedirs(dire)
                file = open(result, 'a')
                # 格式化源文件路径
                fileName = i + '/' + m
                # 调用函数解析
                read_pdf(fileName, result)
  • 相关阅读:
    更多的bash shell命令
    Docker(一)Docker概述
    SpringCloud(一)版本选择
    Scala 技术笔记之 可变长参数
    嵌入式 ThriftServer in Spark
    Spark 代码走读之 Cache
    Scala 技术笔记之 Option Some None
    Spark作业执行
    Shuffle
    Jetty初探
  • 原文地址:https://www.cnblogs.com/dd110343/p/14941993.html
Copyright © 2011-2022 走看看