Python实现pdf文档转txt的方法示例


Posted in Python onJanuary 19, 2018

本文实例讲述了Python实现pdf文档转txt的方法。分享给大家供大家参考,具体如下:

首先,这是一个比较粗糙的版本,因为已经够用了,而且对pdf的格式不熟悉,所以暂时没有进一步优化。

还有,这是转成txt的,所以如果是有图片的pdf是无法保存图片的。

至于本来就是图片的文本,这里是无法分析出来的。那些图片的pdf,估计要用图形匹配的方式来处理,类似于超速拍摄的车牌识别。

不过这样的程度,已经不是文本处理了。扯远了。。。

转出来的文字,好像按照pdf里面的所展示的来换行了,看不到有什么规则还原,我也不知道怎么处理,将就着用吧。

另外,初始代码是网上找的,最初地址不知道哪里了。

用到了第三方库pdfminier

pdfminer库的地址 https://pypi.python.org/pypi/pdfminer3k

下载后,用cmd执行命令 setup.py install

安装完之后打开eclipse会弹出要求加载一些东西,点击确定就行了。

再来看看代码:

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
class CPdf2TxtManager():
  '''''
  classdocs
  '''
  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()
      # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,
      for x in layout:
        if (isinstance(x, LTTextBoxHorizontal)):
          pdfStr = pdfStr + x.get_text() + '\n'
    fileNames = os.path.splitext(filePath)
    file2 = open(fileNames[0] + '.txt','wb')#保存这些内容
    file2.write(pdfStr.encode())
    file2.close()
    file.close()
if __name__ == '__main__':
  '''''
   解析pdf 文本,保存到txt文件中
  '''
  path = r'C:\Users\Administrator\Desktop\《精力管理》.pdf'
  pdf2TxtManager = CPdf2TxtManager()
  pdf2TxtManager.changePdfToText(path)

更多Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python编码操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
跟老齐学Python之使用Python查询更新数据库
Nov 25 Python
python实现颜色rgb和hex相互转换的函数
Mar 19 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
python使用PyQt5的简单方法
Feb 27 Python
Pandas中resample方法详解
Jul 02 Python
Python 静态方法和类方法实例分析
Nov 21 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
Dec 10 Python
keras实现多种分类网络的方式
Jun 11 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
Python3 如何开启自带http服务
May 18 Python
浅谈Python实现2种文件复制的方法
Jan 19 #Python
用Python进行简单图像识别(验证码)
Jan 19 #Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 #Python
python模拟事件触发机制详解
Jan 19 #Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 #Python
简单谈谈python中的lambda表达式
Jan 19 #Python
python使用logging模块发送邮件代码示例
Jan 18 #Python
You might like
真正的ZIP文件操作类(php)
2007/07/21 PHP
php whois查询API制作方法
2011/06/23 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
jquery中filter方法用法实例分析
2015/02/06 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
vue.js全局API之nextTick全面解析
2017/07/07 Javascript
JS仿QQ好友列表展开、收缩功能(第二篇)
2017/07/07 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
Python读取word文本操作详解
2018/01/22 Python
python实现电脑自动关机
2018/06/20 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
linux面试题参考答案(1)
2016/01/22 面试题
教育项目合作协议书格式
2014/10/17 职场文书
优秀教师申报材料
2014/12/16 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
JavaScript继承的三种方法实例
2021/05/12 Javascript
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android
Python 视频画质增强
2022/04/28 Python