#coding=utf-8 #导入开发包 from pdfminer.pdfparser import PDFParser, PDFDocument from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfdevice import PDFDevice from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams #打开模式 """ w :以写方式打开 a :以追加模式打开 r+:以读写模式打开 w+:以读写模式打开(参见w) a+:以读写模式打开(参见a) rb:以二进制读模式打开 wb:以二进制写模式打开(参见w) ab:以二进制追加模式打开(参见a) rb+:以二进制读写模式打开(参见r+) wb+:以二进制读写模式打开(参见w+) ab+:以二进制读写模式打开(参见a+) """ #获取文档的对象 fp=open("naacl06-shinyama.pdf","rb") #创建一个与文档相关的解释器 parser=PDFParser(fp) #创建一个PDF文档对象 doc=PDFDocument() #链接解释器和文档对象 parser.set_document(doc) doc.set_parser(parser) #初始化文档对象,文档若有密码写入,无密码则为空 doc.initialize("") #创建PDF资源管理器 resource=PDFResourceManager() #创建参数分析器。要分析pDF有哪些内容,文本,图片等 #Alt+enter自动导入包 laparam=LAParams() #创建一个聚合器,将资源管理器和参数分析器都放在聚合器里 device=PDFPageAggregator(resource,laparams=laparam) #创建PDF页面解释器,将资源管理器和聚合器放入页面解释器,进行解释 interpreter=PDFPageInterpreter(resource,device) #使用文档对象得到页面的集合 #得到每一页 for page in doc.get_pages(): #使用页面解释器来读取页,因为页面解释器是接收了一个聚合器的,故下面可以直接用聚合器来获取内容 interpreter.process_page(page) #使用聚合器来获取内容 layout=device.get_result() for out in layout: #使用下面的方法,到图片或者下划线时会报错,程序会中断,因为它们没有get_text()方法 #为使程序运行下去可以加个判断 # print(out.get_text()) if hasattr(out,"get_text"): print(out.get_text())