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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
python3中int(整型)的使用教程
Mar 23 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
python3实现随机数
Jun 25 Python
利用Django提供的ModelForm增删改数据的方法
Jan 06 Python
python如何获取当前文件夹下所有文件名详解
Jan 25 Python
Python Excel vlookup函数实现过程解析
Jun 22 Python
彻底解决Python包下载慢问题
Nov 15 Python
python 三种方法提取pdf中的图片
Feb 07 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
微信小程序自定义tab实现多层tab嵌套功能
2018/06/15 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
JointJS JavaScript流程图绘制框架解析
2019/08/15 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python 将list转成字符串,中间用符号分隔的方法
2018/10/23 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python 解决函数返回return的问题
2020/12/05 Python
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
Pureology官网:为染色头发打造最好的产品
2019/09/13 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
小学美术教学反思
2014/02/01 职场文书
班主任对学生的评语
2014/04/26 职场文书
体育之星事迹材料
2014/05/11 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
ES6 解构赋值的原理及运用
2021/05/25 Javascript
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL