Python办公自动化 --- pdf专栏
有时我们想要从pdf文档中
提取里面的图片
如果使用WPS等软件进行提取
是需要收费的,或需要注册会员
或限制文档的大小
都不是很方便
有没有免费的而且快速批量提取
大量pdf里面的图片呢?
对于白领服务工作室来说
您的需求,就是我们的目标!
今天,就为您带来解决办法!
具体实现过程
import fitz
这个库其实就是安装的PyMuPDF库,在实际使用时是导入fitz,这一点需要注意
import os
这个库是用于连接文件路径
上面代码1:
(1)file_path是pdf文件的路径,images_path是提取图片的保存文件夹,必须提取新建好文件夹。如果无该文件夹,会报错。
(2)读取pdf文件,获取pdf文件的页数。
(3)新建1个空列表,存放所有的图片文件。
上面代码2:续接上面代码1
(1)使用循环读取每页pdf。
(2)读取每页pdf里面的内容。
(3)将每页pdf里面的图片,提取出来,存放到images_list列表中。
(4)如果图片列表是空的,说明pdf文件中无图片。否则,就是有图片的,那么此时就使用自定义函数get_imgs()将提取的图片保存到本地文件夹中。
上面代码3:
(1)新建的自定义函数,对提取的所有图片,即images_list列表进行保存。
(2)img是每一个图片,i是索引,从1开始的索引。
(3)将每个图片里面的xref提取出来,然后根据该xref从pdf文档中提取具体的图片base_image。之后,从base_image中提取二进制的图片数据。
(4)再从base_image中提取图片的格式,即image_ext。
(5)按索引号和图片格式,为每个图片取名。
(6)使用open函数将二进制图片数据写入到本地保存。
总结:
以上使用一个主程序入口和一个自定义函数提取1个pdf文档中的所有图片。
如果想批量提取多个pdf文档的图片,见下面。
提取大量pdf文档中的图片
大量的pdf文档存放在本地的e:/pdfs/文件夹里面:
>>> from pathlib import Path
>>> Path('e:/pdfs/').glob('*.pdf')
得到pdfs文件夹里面的所有pdf文档的完整路径,返回生成器。
之后,通过循环,从每个pdf文档的路径读取每个pdf,再使用上面的代码,就能够提取每个pdf文档的所有图片。
如果要将每个pdf文档的所有图片保存在各自独立的文件夹中,还涉及到新建文件夹以及为文件夹按pdf文档名称来取名。
这里可以使用>>>Path('e:/pdf2/').mkdir()来新建文件夹,其中e:/pdf2/就是文件夹的路径,pdf2是文件夹的名称,该名称可以根据pdf文档的名称来修改。
另外,也可以根据上面的方法,来为单个pdf里面的每页pdf的所有图片单独建立文件夹来保存。比较简单,就不列出代码了。如您有兴趣,可以将完整的代码写出来。
注意事项
1、对于文字格式的pdf,上面代码是可以轻松提取所有图片的。
2、对于图片格式的pdf,上面代码会将每页pdf作为一整张图片来提取,也就是pdf文档有N页,就提取N页的图片。每页pdf里面的图片,是无法提取的。
3、对于图片格式的pdf,如果想提取里面的图片,需要将每页pdf提取为图片,然后将每页图片放到PS截取里面的图片。不过,有些麻烦!
你有好方法提取图片格式的pdf里面的所有图片吗?留言或私信告诉我哦!
更多python办公自动化案例和经验
请继续关注我们的公众号和头条号
后期会持续进行更新
“白领服务工作室”的系列视频课如下:
Python办公自动化---Python入门课程
Python办公自动化---Python进阶课程
Python办公自动化---正则表达式
Python办公自动化---数据分析
Python办公自动化---网络爬虫
Python办公自动化---Excel表格专栏
Python办公自动化---Pdf专栏
Python办公自动化---Word专栏
Python办公自动化---图像专栏
Excel/WPS表格 --- 数据处理
如需学习以上视频课程,敬请留言!
作者 | 小白
来源 | 原创
编辑 | 白领服务工作室