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


Posted in Python onMay 08, 2018

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

一、问题描述

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

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

二、效果

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

三、运行环境

python2.7

四、需要安装的库

pip install pdfminer

五、实现源代码

代码1(win64)

# coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
time1=time.time()
import os.path
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
result=[]
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-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import time
time1=time.time()
import os.path
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
result=[]
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文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Python 错误和异常代码详解
Jan 29 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
Python实现的KMeans聚类算法实例分析
Dec 29 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
python实现kNN算法识别手写体数字的示例代码
Aug 16 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
Jan 03 Python
Python实现钉钉订阅消息功能
Jan 14 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 #Python
对Python中gensim库word2vec的使用详解
May 08 #Python
用python处理MS Word的实例讲解
May 08 #Python
基于python批量处理dat文件及科学计算方法详解
May 08 #Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 #Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 #Python
儿童编程python入门
May 08 #Python
You might like
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
MySQL 日期时间函数常用总结
2012/06/12 PHP
IIS6.0中配置php服务全过程解析
2013/08/07 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
详解如何在Javascript和Sass之间共享变量
2019/11/13 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
详解vue v-model
2020/08/31 Javascript
python3.3实现乘法表示例
2014/02/07 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python的Flask框架中实现登录用户的个人资料和头像的教程
2015/04/20 Python
Python中str.format()详解
2017/03/12 Python
对python中return和print的一些理解
2017/08/18 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
女方回门宴答谢词
2014/01/14 职场文书
成人继续教育实施方案
2014/03/01 职场文书
大学生就业自荐书
2014/06/16 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
vue elementUI批量上传文件
2022/04/26 Vue.js