Python实现pdf文档转txt的方法示例
作者:肥宝Fable 发布时间:2021-12-08 19:16:16
标签:Python,pdf,txt
本文实例讲述了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程序设计有所帮助。
来源:http://blog.csdn.net/u012175089/article/details/69267037


猜你喜欢
- 网络训练中,loss曲线非常奇怪交叉熵怎么会有负数。经过排查,交叉熵不是有个负对数吗,当网络输出的概率是0-1时,正数。可当网络输出大于1的
- 问: 如果数据表中有时间字段,现在要迁移到其他时区的服务器上,该如何处理呢?答:在高版本的mysqldump中,新增了一个选项:--tz-u
- 网上大部分都是上传文件,于是个人参照网上一些博客的内容,写了一个把windows上目录上传到远程linux的一个小程序。下面是代码:clas
- 异常(exceptions)是Python中一种非常重要的类型,它和语法错误不同,是在程序运行期间引发的错误。Python中内置了很多异常,
- 一、引子Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下:# coding=UTF-8im
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 今天在写BLOG的Trackback时,需要用到当前页的URL地址,并且包括?后的所有参数。在网上看到以下的这段ASP代码,它的
- 服务器之间的http数据传输直接使用python内置的http服务:python -m SimpleHTTPServer 8000此时,输入
- 一、前言CodeIgniter 是一个简单快速的PHP MVC框架。EllisLab 的工作人员发布了 CodeIgniter。CodeIg
- 学习python都知道,python的第三方库是很多,如果都在本机 pip 的话,在新建项目的时候都会加载不需要用到的库,影响运行速度。而且
- 之前有个程序,里面有个时间部分是按照国内时区,也就是东八区,来写的,程序中定义了北京时间2点到八点进行检查;后面程序在国外机器上,例如说韩国
- 最近邻法和k-近邻法下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类?提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆
- 需求场景:使用sqlalchmy从现有的表中获取数据(不是自己建表)。百度了一下,网上都是使用sqlalchemy自己先创建表,然后导入数据
- 集合创建集合有两种方式:第一种:T = {11,111,"11"}print(T)# {'11', 11
- 一、命令格式:定义变量名称条件函数用“:”作为结尾下一级命令用空格键缩进,默认使用Tab键因为这样比较明显例如:yongHuMing = i
- 前言上次做了用于输入样例格式修改,相当于测试用例的过滤器,这次我们使用类似的思路来做一个对于像C++代码中块注释的过滤器。/** * Def
- 一、配置文件大小及数量日志文件代码需要引入RotatingFileHandler方法,如下:from logging.handlers im
- 一、Mysql 中索引的创建删除innodb 和 myisam 引擎会自动为主键或者带有 UNIQUE 属性的列建立索引。如果要为其他列建立
- 在日常工作中;经常会遇到这样的需求:Oracle 数据表跟文本或者文件格式进行交互;即将指定文件内容导入对应的 Oracle 数据表中;或者
- 本文实例讲述了python socket多线程通讯方法。分享给大家供大家参考,具体如下:#!/usr/bin/evn python"