在現代社會,家長對孩子教育的重視程度與日俱增。暑假來臨,朋友小王面臨着許多家長的共同焦慮:如何為即将升入五年級的孩子做好預習準備。小王的孩子聰明活潑,對新知識充滿好奇,但小王擔心課本的電子版存在一些問題,會影響孩子的學習體驗。
原來,小王找到的電子版課本是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)