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获得linux下所有挂载点(mount points)的方法
Apr 29 Python
python实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
zookeeper python接口实例详解
Jan 18 Python
Python 音频生成器的实现示例
Dec 24 Python
python的slice notation的特殊用法详解
Dec 27 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 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
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP生成条形图的方法
2014/12/10 PHP
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
实例讲解Python3中abs()函数
2019/02/19 Python
Python实现基于SVM的分类器的方法
2019/07/19 Python
python实现堆排序的实例讲解
2020/02/21 Python
Django ORM filter() 的运用详解
2020/05/14 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
交通事故和解协议书
2014/09/25 职场文书
学前班语言教学计划
2015/01/20 职场文书
老公保证书怎么写
2015/02/26 职场文书
大专护理专业自荐信
2015/03/25 职场文书
社区服务活动感想
2015/08/11 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
MySQL系列之二 多实例配置
2021/07/02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
2021/08/07 MySQL
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android