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 PDFTextExtractionNotAllowed10 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 PDFTextExtractionNotAllowed32 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 + '\n')53 54 if __name__ == '__main__':55 parse()