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()