1、解析pdf文件

最近需要将pdf中文本提取出来,于是就了解了一下pdfminer

首先安装:pip3 install pdfminer3k

之后就是用pdfminer解析,不多说,直接上代码,这些代码都是参考各位前辈

from pdfminer.pdfparser import PDFParser,PDFDocument

from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter

from pdfminer.converter import PDFPageAggregator

from pdfminer.layout import LTTextBoxHorizontal,LAParams,LTImage

import os

path=''

def pdf_to_word(folder,password):

#获取指定目录下的所有文件

files=os.listdir(folder)

pdfFiles=[f for f in files if f.endswith('.pdf')]

#获取pdf类型的文件,放到一个列表中

for pdfFile in pdfFiles:

print(pdfFile)

#将目录和文件合并成一个路径 os.path.join('root','test','runoob.txt') ##root/test/runoob.txt

# pdfPath=os.path.join(folder,pdfFile)

#设置将要转换后存放word文件的路径

# wdPath=pdfPath

#判断是否已经存在对应的文件,如果不存在就加入到存放的路径中去

# if wdPath[-4:]!='.docx':

# wdPath=wdPath+'.docx'

fn=open(path+"/{}".format(pdfFile),'rb')

#创建一个PDF文本档分析器:PDFParser

parser=PDFParser(fn)

#创建一个PDF文档:PDFDocumeng

doc=PDFDocument()

#链接分析器与文档

parser.set_document(doc)

doc.set_parser(parser)

#提供出事话的密码,如果没有密码,输入空字符串

doc.initialize('')

#检测文档是否提供txt转换,不提供就直接忽略

if not doc.is_extractable:

print('PDFTextExtractionNotAllowed')

else:

#创建PDF资源管理器:PDFResourceManager

resource=PDFResourceManager()

#创建一个PDF参数分析器:;AParams

laparams=LAParams()

#创建聚合器,用于读取文档的对象:PDFPageAggregator

device=PDFPageAggregator(resource,laparams=laparams)

#创建解释器,对文档编码,解释成python能够识别的格式:PDFPageInterpreter

interpreter=PDFPageInterpreter(resource,device)

#doc.get_pages()是获取page列表的一个方法

num_page,num_image,num_Text=0,0,0

for page in doc.get_pages():

pdf_str=''

#利用解释器的peocess_page()方法解析单独页数

interpreter.process_page(page)

layout=device.get_result()

for out in layout:

if isinstance(out,LTTextBoxHorizontal):

num_Text+=1

print(type(out.get_text()))

pdf_str+=out.get_text().strip()

if isinstance(out,LTImage):

num_image+=1

print(pdf_str)

# with open(wdPath,'a',encoding='utf-8') as f:

# f.write(out.get_text()+'\n')

if __name__=='__main__':

pdf_to_word(path,'')

2、解决编码问题

如果首次这样运行的话,会输出两行文字:

WARNING:root:GBK2K-H

WARNING:root:GBK2K-v

我的平台是ubuntu

我这边是在路径下放了两个pdf文件,一个pdf中是文本,另一个是Image

所以就继续找原因,后面发现是编码问题。

pdfminer3k不能解析特殊字体,需要下载相应的字体包来解决

字体包下载链接:https://github.com/euske/pdfminer/pull/71/commits/2103e5875ef04cfaf424b25d2fd0dc9535a90714#diff-11a7e5c9b1cb16f0ae7d0276f643956d

这里有很多的字体包,看看你的警告是属于哪种字体,就下载相应的字体包。

下载完成之后,不要解压直接放在 pdfminer/cmap文件夹下

pdfminer/cmap文件夹:我的这个是通过pip安装的,找到自己的python包,进去找到里面的相关文件夹就可以了。

再次运行。发现不报刚刚的警告了。但是有了新的问题

然后下面就会以有一堆的cid:xxx

着说明编码问题已经解决了,现在需要的解码。同样的在上面的链接找到图片中相应解码包,这里需要的就是

再以同样的方法保存到同样的位置就可以了。然后就完美的输出文本了。

python解析pdf中文乱码_解析PDF文件以及解决编码问题相关推荐

  1. python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件

    1 源起 自从开始学习Python,就非常喜欢用来画图.一直没有需求画要中文显示信息的图,所以没有配置Python中文的环境.由于昨天就需要画几十个形式相同,只是数据不同的图,并且需要显示中文信息.如 ...

  2. python画图显示中文乱码_解决Python pandas plot输出图形中显示中文乱码问题

    解决方式一: import matplotlib #1. 获取matplotlibrc文件所在路径 matplotlib.matplotlib_fname() #Out[3]: u'd:\\Anaco ...

  3. java txt中文乱码,JAVA读取TXT文件 可解决中文乱码问题

    import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.I ...

  4. python解析pdf中文乱码_使用Python第三方库pdfminer提取PDF内容,并解决中文编码不支持的问题...

    这两天刚好完成一个提取人行简版征信报告PDF所有数据的小项目,中间踩了很多坑,尤其是对于汉字编码问题度娘也不太灵.为了方便后人,在这里记录下在这个过程中我遇到的问题以及我的解决方法. 我用的是mac系 ...

  5. 处理中文乱码_为什么PDF转换成Word后是乱码?这种PDF要怎么转换?

    你是否也遇到过将PDF转换成Word后,却只是一堆乱码?为什么会出现这种情况呢?要如何解决PDF转Word却是乱码的这个问题呢? 首先我们来分析下PDF转换Word后为什么会出现乱码,其实归根究底都是 ...

  6. python中字符串中文乱码_[python] 中文乱码问题

    乱码产生的原因 乱码产生的根本原因是字节流转换字符前后不一致导致.只要掌握了这个核心,就能解决乱码问题.python2中使用了一些"trick"(没有区分字符和字节流),所以理解起 ...

  7. java pdf中文乱码_java转pdf(html转为pdf),解决中文乱码,标签不规范等问题

    第一步,下载jar包以及建对应的文件夹.注意pd4ml的jar要选择pro版本.然后建一个pd4fonts.properties 里面对应的字体. SimSun = simsun.ttf 前面为变量名 ...

  8. java pdf中文乱码_java生成pdf以及解决中文中文乱码问题

    itext版本:5.4.0 其中extrajars中有支持中文的itext-asian.jar. 像工程中导入itextpdf-5.4.0以及itext-asian.jar即可支持中文. 示例代码如下 ...

  9. 高德数据化可视平台数据上传后中文乱码解决方案之一---保证文件为UTF-8编码

    遇到的问题 在数据预览界面发现中文列出现了乱码,如下图红框所示.重新上传多次后依旧乱码 分析 打开上传数据常见问题界面,发现上传要求里写着需保证为UTF-8编码,我查看我上传源文件编码格式,发现的确不 ...

最新文章

  1. 你想知道的关于JavaScript作用域的一切(译)
  2. 34/100. Top K Frequent Elements
  3. java spark yarn_《Spark官方文档》在YARN上运行Spark
  4. citrix web Interface5.3 访问WEB网站时,下载本地客户端
  5. 在linux中关于组的命令,linux 用户和组管理相关的命令
  6. jwt和传统session的区别?
  7. 在IBM AIX p750小机上为Oracle扩展逻辑卷-视频分享
  8. 初秋最佳运动蓝牙耳机推荐,100-500这几款防水蓝牙耳机可以试试
  9. MYSQL实现排序分组取第一条sql
  10. 短信验证码(SMS verification)是什么
  11. 台式计算机如何扫描文件,打印机怎么扫描,教您打印机怎么扫描文件
  12. Gentoo 教程:编译器选择
  13. mysql数据库断开连接_mysql 数据库断开连接
  14. 新IT引领新经济 新华三惠州云博会展现“云”魅力
  15. 谈谈 2020 年程序员收入报告
  16. 【调剂】中科院上海微系统与信息技术研究所2022年接收调剂生的通知
  17. unity游戏开发知识检测
  18. WIndow强制删除文件或文件夹
  19. JXplorer 的简单使用
  20. python邮件发送和正则表达式(1)

热门文章

  1. 深度学习试题_深度学习面试题及参考答案
  2. CKA OFFCIAL TEST准备工作考试说明练习题
  3. unity植物树木模型
  4. 红黑树的插入调整情况分析
  5. FCPX插件电视信号故障转场效果
  6. 嵌入式网络基础——ESP8266的介绍和使用
  7. 用 VB 打开任意盘(硬盘/U盘/光盘)的文件.
  8. 【转】使用DirectUI技术实现QQ界面
  9. python re示例学习
  10. js 获取域名和页面完整地址