大家好,在上周的办公自动化系列文章中,我们已经讲解了如何用Python读取与写入Excel图片,在上上周的GUI系列文章中,也讲解了如何制作一个图片查看软件。
本文将进一步讲解如何用Python提取PDF与Word中图片,并结合之前讲解过的GUI框架PysimpleGUI,做一个多文件图片提取软件,效果如下:
本文主要将分为以下部分讲解:PDF、Word、Excel文件图片提取
构造图片提取器GUI框架
整合代码并打包
主要涉及的Python模块有:PIL
PySimpleGUI
re
win32
os
zipfile
fitz
准备工作
首先使用pip安装相关依赖模块pip install pillow #这是对模块PTL的安装
pip install pypiwin32 #这是对win32的安装
pip install os
pip install zipfile
pip install PyMuPDF #这是引用fitz对PDF操作的包
pip install PySimpleGui
一、提取各文件内嵌图片
在之前的文章有讲过,读取Excel有两种方法。一种是将后缀名改成.zip格式进行提取,一种是通过Pillow模块对Excel进行图片复制与保存。而在我们这次3种文件格式的图片提取当中,Excel提取图片方法和之前一样。
Word提取图片方法和通过.zip提取方法类似,PDF提取图片方法要用到新的模块。由于Excel提取图片的两种方法在之前的文章讲过,故这里只讲解PDF和Word的提取方法。
1.1 提取Word图片思路
和以前一样,我们先看代码再讲解path = values["lujing"]
count = 1
for file in os.listdir(path):
new_file = file.replace(".docx",".zip")
os.rename(os.path.join(path,file),os.path.join(path,new_file))
count+=1
number = 0
craterDir = values["lujing"] + '/' # 存放zip文件的文件夹路径
saveDir = values["lujing"] + '/' # 存放图片的路径
list_dir = os.listdir(craterDir) # 获取所有的zip文件名
for i in range(len(list_dir)):
if 'zip' not in list_dir[i]:
list_dir[i] = ''
while '' in list_dir:
list_dir.remove('')
for zip_name in list_dir:
# 默认模式r,读
azip = zipfile.ZipFile(craterDir + zip_name)
# 返回所有文件夹和文件
namelist = (azip.namelist())
for idx in range(0,len(namelist)):
if namelist[idx][:11] == 'word/media/':#图片是在这个路径下
img_name = saveDir + str(number)+'.jpg'
f = azip.open(namelist[idx])
img = Image.open(f)
img = img.convert("RGB")
img.save(img_name,"JPEG")
number += 1
azip.close() #关闭文件,必须有,释放内存
这里的代码和GUI中通过.zip方式提取Excel图片的代码思路是一样的。“
path = values["lujing"]这里是读取GUI中键为**“lujing”**的值,也即文件存储位置,用于os模块读取与操作。
new_file = file.replace(".docx",".zip")是替换后缀名,如果是Excel的话,就把.docx改成.xlsx或xls。
craterDir = values["lujing"] + '/' 这是存放zip文件的文件夹路径,注意这里读取到的键为“lujing”的值后要在后面添加/。
saveDir = values["lujing"] + '/' 这是存放图片的路径,同理,和上面一样加个/号。”
最后说一下与Excel提取相比,最大的不同是下面的代码
if namelist[idx][:11] == 'word/media/':细心的读者可以发现,与Excel提取相比,中括号里面的值改了。
很好理解,我们可以打印namelist[idx],可以发现在索引0到10是'word/media/'所在位置。而在Excel中是前9位。
感兴趣的读者可以翻看之前的文章,那里有对这段代码的详细解析,这里不多做介绍。
1.2 提取PDF图片思路
和之前的excel提取图片一样,在一个pdf中放入4张图片,我们将它压缩为zip文件