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表格 --- 数据处理

如需学习以上视频课程,敬请留言!

作者 | 小白

来源 | 原创

编辑 | 白领服务工作室