zoukankan      html  css  js  c++  java
  • python read PDF for chinese

     1 import sys
     2 import importlib
     3 importlib.reload(sys)
     4 
     5 from pdfminer.pdfparser import PDFParser,PDFDocument
     6 from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
     7 from pdfminer.converter import PDFPageAggregator
     8 from pdfminer.layout import LTTextBoxHorizontal,LAParams
     9 from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
    10 
    11 '''
    12  解析pdf 文本,保存到txt文件中
    13 '''
    14 path = 'C:\Users\needRead.pdf'
    15 def parse():
    16     fp = open(path, 'rb') # 以二进制读模式打开
    17     #用文件对象来创建一个pdf文档分析器
    18     praser = PDFParser(fp)
    19     # 创建一个PDF文档
    20     doc = PDFDocument()
    21     # 连接分析器 与文档对象
    22     praser.set_document(doc)
    23     doc.set_parser(praser)
    24 
    25     # 提供初始化密码
    26     # 如果没有密码 就创建一个空的字符串
    27     doc.initialize()
    28 
    29     # 检测文档是否提供txt转换,不提供就忽略
    30     if not doc.is_extractable:
    31         raise PDFTextExtractionNotAllowed
    32     else:
    33         # 创建PDf 资源管理器 来管理共享资源
    34         rsrcmgr = PDFResourceManager()
    35         # 创建一个PDF设备对象
    36         laparams = LAParams()
    37         device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    38         # 创建一个PDF解释器对象
    39         interpreter = PDFPageInterpreter(rsrcmgr, device)
    40 
    41         # 循环遍历列表,每次处理一个page的内容
    42         for page in doc.get_pages(): # doc.get_pages() 获取page列表
    43             interpreter.process_page(page)
    44             # 接受该页面的LTPage对象
    45             layout = device.get_result()
    46             # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,
    47             for x in layout:
    48                 if (isinstance(x, LTTextBoxHorizontal)):
    49                     with open("C:\Users\trasformatResult.txt", 'a') as f:
    50                         results = x.get_text()
    51                         print(results)
    52                         f.write(results + '
    ')
    53 
    54 if __name__ == '__main__':
    55     parse()
  • 相关阅读:
    iTOP-4412开发板-串口基础知识和测试方法
    迅为i.MX6ULL终结者开发板-能想到的功能它都有
    Android4.4.2 源码编译-iMX6Q/D核心板-非设备树源码
    如何让Dev支持c++11特性
    2019年第十届蓝桥杯【C++省赛B组】
    upper_bound()和low_bound函数的基本使用和理解(转载,已获博主授权)
    C++的bitset(位操作使用),转载
    2018年第九届蓝桥杯【C++省赛B组】(未完)
    2013蓝桥杯预赛C/C++本科B组
    信用卡号验证
  • 原文地址:https://www.cnblogs.com/jiujue/p/10810466.html
Copyright © 2011-2022 走看看