首页 > 编程 > Python > 正文

Python解析并读取PDF文件内容的方法

2020-01-04 15:09:07
字体:
来源:转载
供稿:网友

本文实例讲述了Python解析并读取PDF文件内容的方法。分享给大家供大家参考,具体如下:

一、问题描述

利用python,去读取pdf文本内容。

Python,读取,PDF文件

二、效果

Python,读取,PDF文件

三、运行环境

python2.7

四、需要安装的库

pip install pdfminer

五、实现源代码

代码1(win64)

# coding=utf-8import sysreload(sys)sys.setdefaultencoding('utf-8')import timetime1=time.time()import os.pathfrom pdfminer.pdfparser import PDFParser,PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LTTextBoxHorizontal,LAParamsfrom pdfminer.pdfinterp import PDFTextExtractionNotAllowedresult=[]class CPdf2TxtManager():  def __init__(self):    '''''    Constructor    '''  def changePdfToText(self, filePath):    file = open(path, 'rb') # 以二进制读模式打开    #用文件对象来创建一个pdf文档分析器    praser = PDFParser(file)    # 创建一个PDF文档    doc = PDFDocument()    # 连接分析器 与文档对象    praser.set_document(doc)    doc.set_parser(praser)    # 提供初始化密码    # 如果没有密码 就创建一个空的字符串    doc.initialize()    # 检测文档是否提供txt转换,不提供就忽略    if not doc.is_extractable:      raise PDFTextExtractionNotAllowed    # 创建PDf 资源管理器 来管理共享资源    rsrcmgr = PDFResourceManager()    # 创建一个PDF设备对象    laparams = LAParams()    device = PDFPageAggregator(rsrcmgr, laparams=laparams)    # 创建一个PDF解释器对象    interpreter = PDFPageInterpreter(rsrcmgr, device)    pdfStr = ''    # 循环遍历列表,每次处理一个page的内容    for page in doc.get_pages(): # doc.get_pages() 获取page列表      interpreter.process_page(page)      # 接受该页面的LTPage对象      layout = device.get_result()      for x in layout:        if hasattr(x, "get_text"):          # print x.get_text()          result.append(x.get_text())          fileNames = os.path.splitext(filePath)          with open(fileNames[0] + '.txt','wb') as f:            results = x.get_text()            print(results)            f.write(results + '/n')if __name__ == '__main__':  '''''   解析pdf 文本,保存到txt文件中  '''  path = u'C:/data3.pdf'  pdf2TxtManager = CPdf2TxtManager()  pdf2TxtManager.changePdfToText(path)  # print result[0]  time2 = time.time()  print u'ok,解析pdf结束!'  print u'总共耗时:' + str(time2 - time1) + 's'

代码2(win32)

# coding=utf-8import sysreload(sys)sys.setdefaultencoding('utf-8')import timetime1=time.time()import os.pathfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreterfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LAParamsfrom pdfminer.pdfpage import PDFTextExtractionNotAllowedfrom pdfminer.pdfparser import PDFParserfrom pdfminer.pdfdocument import PDFDocumentfrom pdfminer.pdfpage import PDFPageresult=[]class CPdf2TxtManager():  def __init__(self):    '''''    Constructor    '''  def changePdfToText(self, filePath):    file = open(path, 'rb') # 以二进制读模式打开    #用文件对象来创建一个pdf文档分析器    praser = PDFParser(file)    # 创建一个PDF文档    doc = PDFDocument(praser)    # 检测文档是否提供txt转换,不提供就忽略    if not doc.is_extractable:      raise PDFTextExtractionNotAllowed    # 创建PDf 资源管理器 来管理共享资源    rsrcmgr = PDFResourceManager()    # 创建一个PDF设备对象    laparams = LAParams()    device = PDFPageAggregator(rsrcmgr, laparams=laparams)    # 创建一个PDF解释器对象    interpreter = PDFPageInterpreter(rsrcmgr, device)    pdfStr = ''    # 循环遍历列表,每次处理一个page的内容    for page in PDFPage.create_pages(doc): # doc.get_pages() 获取page列表      interpreter.process_page(page)      # 接受该页面的LTPage对象      layout = device.get_result()      for x in layout:        if hasattr(x, "get_text"):          # print x.get_text()          result.append(x.get_text())          fileNames = os.path.splitext(filePath)          with open(fileNames[0] + '.txt','wb') as f:            results = x.get_text()            print(results)            f.write(results + '/n')if __name__ == '__main__':  '''''   解析pdf 文本,保存到txt文件中  '''  path = u'C:/36.pdf'  pdf2TxtManager = CPdf2TxtManager()  pdf2TxtManager.changePdfToText(path)  # print result[0]  time2 = time.time()  print u'ok,解析pdf结束!'  print u'总共耗时:' + str(time2 - time1) + 's'

希望本文所述对大家Python程序设计有所帮助。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表