【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。

说明:本文是在Windows10下使用python最新的3.6版本虚拟环境

1. pdfminer3k相关链接:
GitHub:https://github.com/jaepil/pdfminer3k

PyPI:https://pypi.org/project/pdfminer3k/

2. 解析pdf文件用到的类: 
PDFParser:PDF文档分析器:从一个文件中获取数据 
PDFDocument:PDF文档对象:保存获取的数据,和PDFParser是相互关联的 
PDFResourceManager:PDF资源管理器:用于存储共享资源,如字体或图像。
LAParams:PDF参数分析器:分析pdf文件参数
PDFPageAggregator:PDF聚合器:读取获取的文档对象

PDFPageInterpreter:PDF文档解析器:处理页面内容变成Python可以解析 

3.分析思路:

整体思路为:构造文档对象,解析文档对象,提取所需内容

4. 具体的代码:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:pdfConvertor.py
#日期:2018-04-29
#备注:通过调用PDF解析器:pdfminer3k,批量将PDF文件转换为word或者txt文件,先要在python环境安装pdfminer3k在python运行环境通过命令行方式运行:pip3 install pdfminer3k       
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# F:\python_env\PaChong_env
# -*- coding: utf-8 -*-from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
import osdef pdf_to_word(folder,password):# 获取指定目录下面的所有文件files = os.listdir(folder)# 获取pdf类型的文件放到一个列表里面pdfFiles = [f for f in files if f.endswith(".pdf")]for pdfFile in pdfFiles:# 将pdf文件放到指定的路径下面pdfPath = os.path.join(folder, pdfFile)# 设置将要转换后存放word文件的路径wdPath = pdfPath# 判断是否已经存在对应的word文件,如果不存在就加入到存放word的路径内if wdPath[-3:] != 'doc':wdPath = wdPath + ".doc"fn = open(pdfPath, 'rb')# 创建一个PDF文档分析器:PDFParserparser = PDFParser(fn)# 创建一个PDF文档:PDFDocumentdoc = PDFDocument()# 连接分析器与文档parser.set_document(doc)doc.set_parser(parser)# 提供初始化密码,如果无密码,输入空字符串doc.initialize("")# 检测文档是否提供txt转换,不提供就忽略if not doc.is_extractable:print("PDFTextExtractionNotAllowed")else:# 创建PDF资源管理器:PDFResourceManagerresource = PDFResourceManager()# 创建一个PDF参数分析器:LAParamslaparams = LAParams()# 创建聚合器,用于读取文档的对象:PDFPageAggregatordevice = PDFPageAggregator(resource, laparams=laparams)# 创建解释器,对文档编码,解释成Python能够识别的格式:PDFPageInterpreterinterpreter = PDFPageInterpreter(resource, device)# doc.get_pages() 获取page列表for page in doc.get_pages():# 利用解释器的process_page()方法解析读取单独页数interpreter.process_page(page)# 这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象,# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal等等,想要获取文本就获得对象的text属性,# 使用聚合器get_result()方法获取页面内容layout = device.get_result()for out in layout:if (isinstance(out, LTTextBoxHorizontal)):print(out.get_text())with open(wdPath, 'a',encoding='utf-8') as f:f.write(out.get_text() + '\n')if __name__ == '__main__':pdf_to_word("F:\PythonProject\Pacong\docs","")

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python读写json文件的简单实现

转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、Java、Ja…

Nacos配置

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

【Python】如何选择赋值和拷贝

在Python中,一切皆为对象,对象通过「变量名」引用,「变量名」更确切的叫法是「名字」,好比我们每个人都有自己的名字一样,我们通过名字来代指某个人,代码里面通过名字来指代某个对象。变量赋值就是给对象绑…

❤️震惊!人生苦短,我用python来玩田忌赛马❤️

一读标题笑死自己哈哈哈,最近猪哥(玩得敲好的彭友)找我帮忙解决他不会作业哈哈哈,他们公司自己出的笔试题哈哈哈,希望别被他们出题人看见哈哈哈,回想猪哥说的一句话,万一这就是以后你遇到的试题…

错误之data_insertt() takes 1 positional argument but 2 were given解决方法

1、首先检测函数与调用直接的参数是否匹配。 2、若为python环境。 函数定义如下: 调用如下: 显示如下错误: 解决方法:在函数定义时添加self。即为: 则问题解决。 这是一个很基本的,但是很严重的错误。只…

python将Unix时间戳转换成时间

将时间戳转换成时间 在时间戳转换成时间中,首先需要将时间戳转换成localtime,再转换成时间的具体格式: 利用localtime()函数将时间戳转化成localtime的格式利用strftime()函数重新格式化时间 #coding:UTF-8 import timetimestamp 15324990…

错误之Only one usage of each socket address (protocol/network address/port)解决办法

错误如下: 解决方案:这个错误是端口占用导致。我们应找到此应用程序对应端口号的pid然后kill掉,即可ok

【测试】用例设计思路-六方面

有这样一个面试题:在一个Web测试页面上,有一个输入框,一个计数器(count)按钮,用于计算一个文本字符串中字母a出现的个数。 请设计一系列测试用例用以测试这个Web页面。 有经验的测试人员可能会问面试官&…

Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

code: 1 #encodingutf-82 from django.db import models3 # Create your models here.4 class BookInfo(models.Model): #创建书本信息类,继承models.Model5 booktitlemodels.CharField(max_length20)6 bookdatamodels.DateField()7 class HeroInfo(model…

【Excel】函数DateDif查看两个日期之间的间隔

Excel中的DateDif函数是一个隐藏函数,在excel的公式以及帮助中是找不到的,必须要手工输入才可以。 此函数的格式为datedif("开始日期","结束日期","参数"),说明如…

【技巧】搜狗输入法特殊技巧

有时候我们报销或者其他情况下需要对金额进行大写,这时我们可以通过搜狗输入法进行转换;阅读的时候,我们会遇到一些特殊而且复杂的字,这个时候我们也可以通过搜狗输入法知道这个字怎么读。 先下载搜狗拼音输入法: 数字金额进行转换…

【商业】梳理你的商业模式

商业模式一直是一个好像每个人都能说两句,但是总也说不清楚的话题。 商业模式是企业的立身之本,也是企业的本质和核心。商业模式是人们商业智慧的集中体现,也是商业中最令人兴奋的部分。在商业模式的背后,有着太多的成功与失败、欢…

Django配置bootstrap

1、下载bootstrap文件。https://getbootstrap.com/docs/3.3/getting-started/ 下载的文件夹可以看出有css、fonts、js三个文件,这就是Bootstrap 3的全部 2、 自定义静态文件(css,js,image)位置 根目录下新建 static…

【Python爬虫】Windows环境下wxpy不需每次登陆重新扫描

有时候我们想每天向你女朋友或者某人发送一条信息(通过线程控制或者每天自动任务);此外我们可以通过更改wxpy中Bot()中参数,保存缓存不用每次都扫描二维码。 以下代码来源于:http://www.cnblogs.com/botoo/p/8622379.html from …

Win10系统设置任务计划执行python脚本

上一篇文章说了通过Python中的wxpy在微信每天发送一条消息到女朋友或者某个人,通过线程方式每天发送次消息。 这里主要说如何通过window10自带的“任务计划程序”,每天在指定时间发送一条消息。 1. 首先通过windows 10系统左下角输入框输入“任务计划程…

【Word 】隐藏功能生成特殊线

有时候在用word进行文字处理时,有一些方法可以快速生成特殊的线,以下是具体的一些方法: 1.输入3个“”,再按回车键Enter,生成一条双直线 2.输入3个“~~~”,再按回车键Enter,生成一条波浪线 3.输…

Django - - - -视图层之视图函数(views)

阅读目录(Content) 视图层之视图函数(views) 一个简单的视图1.HttpRequest2.HttpResponse 1.render 函数 2.redirect 函数对比render与redirect: 回到顶部(go to top) 视图层之视图函数(views) 一个视图函数,简称视图,是一个简单的Python …

【Excel】设计简单抽奖小程序

其实我们可以通过excel做一个抽奖的小程序。比如搞活动送奖品,我们就可以通过这个小程序抽中奖名单 中奖名单下面输入“INDIRECT("A"&RANDBETWEEN(4,12))”,然后按F9进行抽奖 其中用到了两个函数INDIRECT(单元格引用,[引用样式…

【Python】retrying模块使用场景

大家在做数据抓取或者用selenium自动化进行元素定位的时候,经常遇到由于网络问题导致的抓取数据失败,或者定位元素失败。 针对这种情况,我们可以通过设置等待时间去控制,其实还有一种方法,就是使用retrying&#xff0c…

Django连接现有mysql数据库

1、打开cmd后cd到项目位置 2、建立项目 django-admin startproject test2 3、编辑项目中的配置文件, mysite/settings.py ,告诉Django你的数据库连接参数和数据库名。具体的说,要提供 DATABASE_NAME , DATABASE_ENGINE , DATABASE_USER , DATABASE_PASSWORD , DATA…