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改变日志(logging)存放位置的示例
Mar 27 Python
python类和继承用法实例
Jul 07 Python
python多进程共享变量
Apr 06 Python
Python制作Windows系统服务
Mar 25 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
Jun 03 Python
Python socket服务常用操作代码实例
Jun 22 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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
smarty实例教程
2006/11/19 PHP
一个PHP模板,主要想体现一下思路
2006/12/25 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
Vue组件系列开发之模态框
2019/04/18 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python实现的矩阵类实例
2017/08/22 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Python实现微信小程序支付功能
2019/07/25 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python3如何判断三角形的类型
2020/04/12 Python
python爬虫基础之urllib的使用
2020/12/31 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
经典c++面试题二
2015/08/14 面试题
白酒市场开发计划书
2014/01/09 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
2015教师个人年度工作总结
2015/10/23 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang
4种方法python批量修改替换列表中元素
2022/04/07 Python