io python 读取pdf_Python读取PDF文件--pdfminer

作者使用的是Python3.6版本。

pdfminer在Python2和Python3中的安装和使用有一定的区别,本文以Python为例。

首先安装pdfminer

pip install pdfminer3k

官网对PDFMiner的介绍如下:

PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows to obtain the exact location of texts in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes instead of text analysis.

PDF的格式不是规范的,很多情况下没有逻辑结构,不能自适应页面大小的调整。PDFMiner是通过尝试猜测PDF的布局来重建其结构,有时候效果并不理想。

import importlib
import sys
import timeimportlib.reload(sys)
time1 = time.time()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 PDFTextExtractionNotAlloweddef parse(pdf_path,txt_path):'''解析PDF文本,并保存到TXT文件中'''fp = open(text_path,'rb')# pdf1 = urlopen('http://www.tencent.com/20160321.pdf')#用文件对象创建一个PDF文档分析器parser = PDFParser(fp)#创建一个PDF文档doc = PDFDocument()#连接分析器,与文档对象parser.set_document(doc)doc.set_parser(parser)#提供初始化密码,如果没有密码,就创建一个空的字符串doc.initialize()#检测文档是否提供txt转换,不提供就忽略if not doc.is_extractable:raise PDFTextExtractionNotAllowedelse:#创建PDF,资源管理器,来共享资源rsrcmgr = PDFResourceManager()#创建一个PDF设备对象laparams = LAParams()device = PDFPageAggregator(rsrcmgr,laparams=laparams)#创建一个PDF解释其对象interpreter = PDFPageInterpreter(rsrcmgr,device)#循环遍历列表,每次处理一个page内容# doc.get_pages() 获取page列表for page in doc.get_pages():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)):with open(txt_path,'a') as f:results = x.get_text()print(results)f.write(results  +"n")if __name__ == '__main__':pdf_path = './test.pdf'txt_path = './test.txt'parse(pdf_path,txt_path)time2 = time.time()print("总共消耗时间为:",time2-time1)

上述代码只能解析正常的PDF内容,在实际应用场景中,很多PDF文档可能是加密的,如何处理解密的PDF文件,也是我们需要get的技能。

pydf2这个库能够实现对PDF文件进行加密和解密。

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

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

相关文章

战斗机各种世界之最,涨知识了。。。

全世界只有3.14 % 的人关注了青少年数学之旅世界上最大的战斗机苏联的图-128是目前世界上起飞重量最大,体积最大的一款截击机,它由前苏联图波列夫设计局于1955研制成功并进行首飞,1963年装备部队,该机全长30.03米,翼展…

Bye Bye Embed-再见了Embed,符合web标准的媒体播放器代码

由于Embed标签是Netscape的私有财产,故一直未被W3C认可,对于各种媒体文件使用Embed标签是非标准的,如何改变?Elizabeth Castro的 Bye Bye Embed 一文对于各种媒体播放器给出了很好的符合web标准的代码。 在线媒体播放--Google Vid…

.NET Core授权失败如何自定义响应信息?

【导读】在.NET 5之前,当授权失败即403时无法很友好的自定义错误信息,以致于比如利用Vue获取到的是空响应,不能很好的处理实际业务,同时涉及到权限粒度控制到控制器、Action,也不能很好的获取对应路由信息本文我们来看…

计算机电缆2x2x1.5,计算机电缆djypvp1x2x1.5

计算机电缆djypvp1x2x1.5硅橡胶计算机电缆适用于各种仪器仪表的连结, 以及信号传输。它具有耐高温、低温、耐腐蚀、舒缓老化等优点,对特殊场所或恶劣环境中的使用是目前理想的产品,正常使用温度为—60℃一250℃。产品特点:1.执行标准Q/ILXD-1…

jQuery实现等比例缩放大图片让大图片自适应页面布局

在布局页面时,有时会遇到大图片将页面容器“撑破”的情况,尤其是加载外链图片(通常是通过采集的外站的图片)。那么本文将为您讲述使用jQuery如何按比例缩放大图片,让大图片自适应页面布局。通常我们处理缩略图是使用后…

虚线 实现_redis跳跃表实现

跳跃表是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。redis 使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员是比…

当代家长现状。。 | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅(图源都市音酱)太真实了↓ ↓ ↓

使用目录服务和 Visual C# .NET 向本地系统添加用户

创建示例1. 打开 Microsoft Visual Studio .NET,然后新建一个 Visual C# Console 应用程序项目。 2. 在“解决方案资源管理器”中,右键单击引用,然后单击添加引用。 3. 添加一个对 System.DirectoryServices.dll 程序集的引用。 4. 将 Clas…

Prometheus(一):Web服务环境监控

写在前面现每个后端的同学的日常都在跟服务(接口)打交道,维护老的比较大单体应用、按业务拆得相对比较细的新服务、无论企业内部用的,面向用户的前端的服务。流量大的有流量小的,有重要的有不那么重要的。但是,不管怎…

自拟计算机作文100字,我的电脑作文100字五篇

我家有一台电脑,颜*是黑*的,电脑的作用是可以玩游戏,还可以查自己不懂的问题。有一次,爸爸和妈妈不在家,我就先做完作业,在做作业的时有一道题我不知道怎么做,于是,我上百度上一搜&a…

acwing Linux 租云服务器环境配置

今天给大家讲解acwing Linux 租云服务器&环境配置,这里以阿里云为例子给大家讲解一下如何租用这个云服务器,现在有阿里云、华为云、腾讯云、京东云这么几个大的服务系统,我个人是喜欢华为云的嘻嘻,因为个人比较喜欢华为公司&a…

Shell练习题(持续更新)

1.输出1-10echo {1..10} seq -s 1 10 #默认分隔符\n for((i1;i<10;i));do echo -n "$i ";done;echo #最后echo为了换行 i1;while [ $i -le 10 ];do printf "%s " $i;i$[$i1];done;echo awk BEGIN{for(i1;i<10;i) printf "%s ",i;};…

楼层效果_1一28高楼最好最吉利的楼层是哪层?选楼层要注意什么?

在选择房屋楼层的时候&#xff0c;可能大家对于想过了&#xff0c;方法是比较纠结的&#xff0c;有些家庭可能考虑到室内的采光问题&#xff0c;有些可能考虑的是噪音的问题&#xff0c;更有些朋友们可能考虑的是室内的风水等相关问题&#xff0c;那么1一28高楼最好最吉利的楼层…

43秒处竟惊现刘强东!印度动作大片《WAR》终极预告曝光

全世界只有3.14 % 的人关注了青少年数学之旅都说印度是一个非常奇妙的国度&#xff0c;文能Z教治国&#xff0c;武能高产神片。科学家们骂骂咧咧地退出了群聊...这不&#xff0c;前不久印度又曝光了一部动作大片《WAR》&#xff1a;电影的剧情大概是讲述了一名印度士兵被派去消…

C# 极限压缩 dotnet core 控制台发布文件

每次发布 dotnet core 应用都会觉得发布文件太大&#xff0c;而如果使用极限压缩&#xff0c;用 CoreRT 能让发布的控制台文件到 5KB 左右&#xff0c;不需要带框架就能在其他设备运行这是微软 MichalStrehovsky 大佬&#xff0c;也就是 CoreRT 项目开发者给的方法在开始写代码…

按id进行查找按名称进行排序_Excel工作表中如何按需要的顺序快速进行排序

在工作中&#xff0c;有时候需要经常对一组内容按一定的顺序来进行排序。如果每次都手动进行排序&#xff0c;会小号很多时间。因此可以将特定顺序添加到自定义序列中。有两种不同的操作方法可以来实现。方法一如图&#xff0c;现在有一列水果名称&#xff0c;之后需要都按照现…

ajax 返回flase,Django request.is_ajax返回false

小编典典我不知道你怎么了 我测试并取得了良好的消息&#xff1a;This is ajax。我的代码&#xff1a;urls.pyurl(r^$, myapp.views.home, namehome),url(r^ajax_test/$, myapp.views.ajax_test, nameajax_test),views.pydef home(request):return render_to_response(home.htm…

20种最先进的机器人,感觉有点吓人!

全世界只有3.14 % 的人关注了青少年数学之旅随着科技的发展&#xff0c;机器人必然逐渐进入我们的生活&#xff0c;甚至在许多领域替代人类。以下是目前全球范围内最先进的一些机器人&#xff1a;Actroid-F这种实验性机器人的目标&#xff0c;是创造最逼真的仿人类机器人&#…

PDF批量删除注释

使用Adobe Acrobat Pro的批量处理完成 1.在“自定义”-“添加新工具集”-“动作向导”-将“创建新动作”加入-“保存”2.然后点新出现的“创建新动作”图标3.将“内容”-“删除所有注释”添加上&#xff0c;然后再添加上“保存和导出”中的保存4.保存设定的动作列表&#xff0c…

linkButton与Button 的click事件与onclientClick事件

linkButton与button 在ie7中两个事件都能被执行。但是在ie6中&#xff0c;linkButton中的onclientClick事件先执行&#xff0c;而click事件不被执行。在ie7中&#xff0c;二者都执行了。button就没有这个问题。实验&#xff1a;通过showModalDialog()弹出一个窗口&#xff0c;窗…