在现代社会,家长对孩子教育的重视程度与日俱增。暑假来临,朋友小王面临着许多家长的共同焦虑:如何为即将升入五年级的孩子做好预习准备。小王的孩子聪明活泼,对新知识充满好奇,但小王担心课本的电子版存在一些问题,会影响孩子的学习体验。
原来,小王找到的电子版课本是Word版本,里面附带了大量的图片【word的每一页都只有一张图片】。这些图片本是为了辅助教学,但打印出来后发现边缘有明显的黑框,显得很不美观。小王不想让孩子因为这些问题而对学习产生抵触情绪,于是想到了我这个会编程的朋友,看看能不能用技术手段解决这个问题。
我思考了一下,觉得可以用Python编写一个程序,实现从Word文档中提取图片,并保存为JPG格式。这样,小王就可以将提取出来的图片打印出来,给孩子一个更加清晰、美观的学习资料。
核心代码
import docx
import os, re
word_path = 'E:\\code\\plan_work\\Demo.docx'
result_path = "./img_result"
# doc = docx.Document(word_path)
# dict_rel = doc.part._rels
# for rel in dict_rel:
# rel = dict_rel[rel]
# if "image" in rel.target_ref:
# if not os.path.exists(result_path):
# os.makedirs(result_path)
# img_name = re.findall("/(.*)", rel.target_ref)[0]
# word_name = os.path.splitext(word_path)[0]
# if os.sep in word_name:
# new_name = word_name.split('\\')[-1]
# else:
# new_name = word_name.split('/')[-1]
# img_name = f'{new_name}-'+'.'+f'{img_name}'
# with open(f'{result_path}/{img_name}', "wb") as f:
# f.write(rel.target_part.blob)
def get_pictures(word_path, result_path):
"""
图片提取
:param word_path: word路径
:return:
"""
try:
doc = docx.Document(word_path)
dict_rel = doc.part._rels
for rel in dict_rel:
rel = dict_rel[rel]
if "image" in rel.target_ref:
if not os.path.exists(result_path):
os.makedirs(result_path)
img_name = re.findall("/(.*)", rel.target_ref)[0]
word_name = os.path.splitext(word_path)[0]
if os.sep in word_name:
new_name = word_name.split('\\')[-1]
else:
new_name = word_name.split('/')[-1]
img_name = f'{new_name}-'+'.'+f'{img_name}'
with open(f'{result_path}/{img_name}', "wb") as f:
f.write(rel.target_part.blob)
except:
pass
if __name__ == '__main__':
#获取文件夹下的word文档列表,路径自定义
# os.chdir("D:\Demo")
# spam=os.listdir(os.getcwd())
# for i in spam:
# get_pictures(str(i),os.getcwd())
get_pictures(word_path,result_path)