from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.layout import LAParams from pdfminer.converter import PDFPageAggregator from pdfminer.pdfinterp import PDFTextExtractionNotAllowed def parse(): #rb以二进制模式打开本地pdf文件 fn = open('/Users/fred/Desktop/test.pdf', 'rb') #创建一个pdf文档分析器 parser = PDFParser(fn) #创建一个pdf文档 doc = PDFDocument() #连接分析器与文档对象 parser.set_document(doc) doc.set_parser(parser) #如果没有密码就创建一个空的字符串 doc.initialize('') #检测文档是否提供txt转换,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed else: #创建pdf资源管理器 resource = PDFResourceManager() #创建一个pdf参数分析器 laparams = LAParams() #创建聚合器,用于读取文档的对象 device = PDFPageAggregator(resource, laparams=laparams) #创建解释器,对文档编码,解析成python能够识别的格式 interpreter = PDFPageInterpreter(resource, device) #循环便利列表,每次处理一页的内容 for page in doc.get_pages(): #利用解释器的process_page()方法解析读取单独页数 interpreter.process_page(page) #使用聚合器获取内容 layout = device.get_result() #这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象 for out in layout: #判断是否含有get_text()方法,获取我们想要的文字 if hasattr(out, 'get_text'): print(out.get_text()) with open('/Users/fred/Desktop/test.txt', 'a') as f: f.write(out.get_text() + ' ') if __name__ == '__main__': parse()