python pdfminer用法演示

"""pdfminer_demo.py

注意:
    1. python 3.x需要安装的是pdfminer3k而不是pdfminer(后者仅支持python 2.x),不过在导入的时候的语句都是`import pdfminer`

参考:
    1. Python 3.6 中使用pdfminer解析pdf文件 - 大泡泡的专栏 - CSDN博客 https://blog.csdn.net/u011389474/article/details/60139786

"""
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.converter import PDFPageAggregator


def from_pdf_to_txt(read_file, write_file, page_start=0, page_end=0):
    """

    :param read_file: str. 注意后缀名是".pdf"
    :param write_file: str. 注意后缀名填".txt"
    :param page_start: int
    :param page_end: int
    :return:
    """
    
    # 以二进制读模式打开
    origin_pdf_file = open(read_file, 'rb')
    # 用文件对象来创建一个pdf文档分析器
    parser = PDFParser(origin_pdf_file)
    # 创建一个pdf文档
    doc = PDFDocument()
    # 连接分析器与文档对象,这个语句比较有意思,相互set对方进去
    parser.set_document(doc)
    doc.set_parser(parser)
    
    # 提供初始化密码.如果pdf没有密码,就传入一个空参数
    doc.initialize()
    
    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        # 如果pdf不支持提取,则直接报错
        raise PDFTextExtractionNotAllowed
    else:
        # 创建pdf资源管理器 来管理共享资源
        srcmgr = PDFResourceManager()
        # 创建一个pdf设备对象
        device = PDFPageAggregator(srcmgr, laparams=LAParams())
        # 创建一个pdf解释器对象
        interpreter = PDFPageInterpreter(srcmgr, device)
        
        # 循环遍历列表,每次处理一个page的内容
        pages = list(doc.get_pages())
        if page_end == 0:
            page_end = len(pages)
        
        for i in range(page_start, page_end):
            interpreter.process_page(pages[i])
            
            # 接受该页面的LTPage对象
            layout = device.get_result()
            # 这里返回的是一个LTPage对象,里面存放着这个page解析出的各种对象
            # 一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等
            # 想要获取文本就取它的text属性,即x.get_text()
            
            # 获取text属性
            for x in layout:
                if isinstance(x, LTTextBoxHorizontal):
                    with open(write_file, 'a', encoding='utf-8') as f:
                        results = x.get_text()
                        f.write(results + '\n')
        
        # 最后关闭原始pdf文件
        origin_pdf_file.close()


def test():
    from_pdf_to_txt('../data/sample.pdf', '../output/output.txt', 0, 1)


if __name__ == '__main__':
    test()

你可能感兴趣的:(Python,模块演示,python,pdfminer,demo)