作者 | 陈熹

头图 | CSDN 下载自东方 IC

来源 | 早起Python(ID:zaoqi-python)

导读

大家好,在之前的办公自动化系列文章中我们已经详细介绍了如何使用Python批量处理PDF文件,包括合并、拆分、水印。

今天我们再次回到PDF,详细讲解如何使用Python从PDF提取指定的信息。我们将以一份年度报告PDF为例进行介绍,内含大量文字、表格、图片,具体如下:

模块安装

首先需要安装两个模块,第一个是pdfplumber,在命令行使用pip安装即可????

pip install pdfplumber

第二个是fitz, 它是pymupdf中的一个模块,同样可以使用pip轻松安装

pip install pymupdf

文字信息提取

使用Python提取PDF中文字代码思路如下

  1. 利用pdfplumber打开一个 PDF 文件

  2. 获取指定的页,或者遍历每一页

  3. 利用.extract_text()方法提取当前页的文字

现在让我们用上述代码尝试提取示例数据中第12页的文字????

import pdfplumberfile_path = r'C:\xxxx\practice.PDF'
with pdfplumber.open(file_path) as pdf:    page = pdf.pages[11]    print(page.extract_text())

结果如下图所示

接着可以将内容通过导入python-docx并借助wordfile.add_paragraph()写入Word文件中,而这个模块我们已经讲解很多次,此处就不再赘述。

表格信息提取

使用Python提取单个表格和提取单页文字的代码非常类似,用的是.extract_table()

但需要注意的是.extract_table()默认提取指定页面的第一个表格,如果当前页面有多个表格都需要提取,则要直接使用.extract_tables()

例如示例文件中第 13 页有 2 个表格,我们分别利用.extract_table()和.extract_tables()观察输出结果

import pdfplumberfile_path = r'C:\xxxx\practice.PDF'
with pdfplumber.open(file_path) as pdf:    page = pdf.pages[12]    print(page.extract_table())

结果如下

可以看到是一个嵌套列表,熟悉这种格式的人会理解想到可以pandas或者遍历该嵌套列表后借助openpyxl的sheet.append(list)写入Excel文件中,

import pdfplumberfile_path = r'C:\xxxx\practice.PDF'
with pdfplumber.open(file_path) as pdf:    page = pdf.pages[12]    print(page.extract_tables())

而.extract_tables()提取当前页所有表格会产生了一个三级嵌套列表,第一层的列表就代表每一个表格,之后也可以利用其他库写入Excel。

图片提取

对于图片提取,现在没有任何一个模块可以做到百分之百的提取。本文只介绍基于fitz模块的代码,基本思路是通过正则查找图片并将其输出

例如提取示例文件中的图片,代码可以这么写????

import fitzimport reimport os
file_path = r'C:\xxx\practice.PDF'dir_path = r'C:\xxx' # 存放图片的文件夹
def pdf2pic(path, pic_path):    checkXO = r"/Type(?= */XObject)"    checkIM = r"/Subtype(?= */Image)"    pdf = fitz.open(path)    lenXREF = pdf._getXrefLength()    imgcount = 0    for i in range(1, lenXREF):        text = pdf._getXrefString(i)        isXObject = re.search(checkXO, text)        isImage = re.search(checkIM, text)        if not isXObject or not isImage:            continue        imgcount += 1        pix = fitz.Pixmap(pdf, i)        new_name = f"img_{imgcount}.png"        if pix.n < 5:            pix.writePNG(os.path.join(pic_path, new_name))        else:            pix0 = fitz.Pixmap(fitz.csRGB, pix)            pix0.writePNG(os.path.join(pic_path, new_name))            pix0 = None        pix = None
pdf2pic(file_path, dir_path)

结果如下

可以看到成功提取了图片,但PDF中的图片远不止这些,如果你有其他思路或者方法可以在留言区与我交流。

写在最后

最后要说明的是,在上一篇文章及本文中我们剖析了每一行代码。但针对PDF的模块较多,且有些模块功能并不完善,代码也没有类似OFFICE三件套操作那般简洁,因此更多时候以理解为主,不需要完全掌握写,会用会改即可!

当然还是希望大家能够理解Python办公自动化的一个核心就是批量操作-解放双手,并且能与日常办公结合让复杂的工作自动化!

更多精彩推荐
☞2020 最烂密码 TOP 200 大曝光,霸榜的竟然是它?
☞腾讯 AI 医学进展破解“秃头”难题,登 Nature 子刊!
☞小鹏汽车CEO疑似隔空回应偷窃技术传闻;苹果明年新款iPhone将使用增强版5nm芯片;Windows诞生35周年|极客头条
☞用Python分析5000+抖音大V,粉丝最喜欢的视频类型是它
☞亿级大表分库分表实战总结(万字干货,实战复盘)
☞优秀!一鼓作气学会“一致性哈希”,就靠这 18 张图了
点分享点点赞点在看

别再问如何用 Python 提取 PDF 内容了!相关推荐

  1. c++代码整洁之道pdf_别再问如何用python提取PDF内容了

    作者:陈熹 来源:早起Python 大家好,在之前的办公自动化系列文章中我们已经详细介绍了如何使用python批量处理PDF文件,包括合并.拆分.水印.加密等操作. 今天我们再次回到PDF,详细讲解如 ...

  2. 怎么在python提取别的数据了_别再问如何用python提取PDF内容了!

    作者:陈熹 来源:早起Python 大家好,在之前的办公自动化系列文章中我们已经详细介绍了如何使用python批量处理PDF文件,包括合并.拆分.水印.加密等操作. 今天我们再次回到PDF,详细讲解如 ...

  3. 别再问如何用Python提取PDF内容了!

    公众号后台回复"图书",了解更多号主新书内容 作者:陈熹 来源:早起Python 导读 大家好,在之前的办公自动化系列文章中我们已经详细介绍了????如何使用Python批量处理P ...

  4. python自动办公 pdf_别再问如何用 Python 提取 PDF 内容了!

    作者|陈熹 头图 | CSDN 下载自东方 IC 来源 | 早起Python(ID:zaoqi-python) 导读 大家好,在之前的办公自动化系列文章中我们已经详细介绍了如何使用Python批量处理 ...

  5. python提取pdf内容_别再问如何用Python提取PDF内容了!

    导读 大家好,在之前的办公自动化系列文章中我们已经详细介绍了

  6. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字

    从pdf中提取文字,相信很多人都干过这事,怎么在python中实现呢,今天带大家看看. 第一步导入库 import PyPDF2 第二步导入pdf文件 pdf_file =open('dataset/ ...

  7. 如何用python修改pdf内容_如何利用python将pdf文件转化为txt文件?

    https://www.wukong.com/answer/6579491774144708872/?iid=15906422033&app=news_article&share_an ...

  8. python批量将pdf转成word_如何用Python把pdf转换成word

    很多时候,我们需要把文件的形式来回转换.那么学了编程的小伙伴,我们该如何用Python把pdf转换成word呢? 一.下载所需要的库 1.pdfminer 安装库命令pip install pdfmi ...

  9. Python提取PDF表格及文本!(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取 Python免费学习资料 ...

最新文章

  1. mysql远程连接oracle数据库服务器配置_远程访问oracle数据库
  2. Python到底是有什么魅力,让程序猿为它折腰?
  3. 东芝硬盘插入台式机后滴滴响
  4. Rails下cloud datastore的使用
  5. ajax跨浏览器初始化,使用Ajax的jQuery localStorage的跨浏览器
  6. js 判断一个字符在字符串中出现的次数 - 代码篇
  7. 平常代码练习报错问题解决
  8. jdbctemplate 批量删除_10秒3步批量去除PDF水印
  9. request获取各种路径总结
  10. innodb ibd结构图
  11. VUE基础(躺着都能会)
  12. 深入理解二进制 算法必备底层知识
  13. 软件工程(速成)——第四章 总体设计
  14. JAVA并发编程的书籍及资料
  15. 消除transition闪屏
  16. 美国最受欢迎的婴儿名字:女孩Sophia和男孩Liam
  17. 第八章 高级搜索树 (b4)B-树: 插入
  18. MATLAB直接输出棋盘格标定板
  19. Android免费的导出微信朋友圈文字和图片的工具
  20. 自动控制原理 第一章 控制系统的一般概念

热门文章

  1. 【更新】火星人敏捷开发手册 2011-12-31
  2. Linux各个目录的用途
  3. VC-SDK路报(预备知识与概念介绍)
  4. 数据结构:五岔路口交通管理红绿灯设计
  5. SQL存储过程跨服务器访问
  6. 天的故事 V1.0.2
  7. 啥时候js单元测试变的重要起来?
  8. Linux下让Eclipse支持Python
  9. 本地计算机上的MSSQLSERVER服务启动后又停止了。一些服务自动停止,如果它们没有什么可做的,例如“性能日志和警报“服务。...
  10. [Git] 我的 Github 地址