Python Word批量插入图片教程
用python-docx向Word文档批量插入本地图片,设置图片宽度、居中对齐,支持遍历文件夹自动插入所有图片,生成带配图的Word报告。
场景痛点
做产品手册、项目汇报、活动总结,需要把几十张截图、照片按顺序插入Word文档,还要每张图调整宽度、居中、加图注。手动插入一张图调一次格式,几十张图点几百次鼠标。用python-docx可以遍历图片文件夹,按文件名排序自动插入,宽度统一设置,图注自动生成,几分钟出一份图文混排的Word文档。
用到的库
pip install python-docx Pillow
完整代码
# 导入库
from docx import Document
from docx.shared import Cm, Pt, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from PIL import Image
import os
def get_image_size(image_path):
"""读取图片原始宽高,用于按比例缩放"""
with Image.open(image_path) as img:
return img.size # (width, height) 像素
def insert_image_centered(doc, image_path, width_cm=15, caption=None):
"""
在文档末尾插入一张居中图片
width_cm: 图片宽度,单位厘米,高度按比例自动计算
caption: 图注文字,为None则不加
"""
# 添加图片段落
para = doc.add_paragraph()
para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
# 按原始宽高比计算高度
orig_w, orig_h = get_image_size(image_path)
height_cm = width_cm * orig_h / orig_w
# 插入图片
run = para.add_run()
run.add_picture(image_path, width=Cm(width_cm), height=Cm(height_cm))
# 加图注
if caption:
caption_para = doc.add_paragraph()
caption_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
caption_run = caption_para.add_run(caption)
caption_run.font.size = Pt(9)
caption_run.italic = True
def batch_insert_images(docx_path, image_folder, width_cm=15):
"""
遍历图片文件夹,把所有图片按文件名顺序插入Word
"""
# 收集所有图片文件
image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp')
image_files = []
for filename in sorted(os.listdir(image_folder)):
if filename.lower().endswith(image_extensions):
image_files.append(os.path.join(image_folder, filename))
if not image_files:
print('文件夹里没有找到图片')
return
# 打开或新建文档
if docx_path and os.path.exists(docx_path):
doc = Document(docx_path)
else:
doc = Document()
doc.add_heading('图片合集', level=1)
# 逐张插入
for idx, img_path in enumerate(image_files, start=1):
caption = f'图 {idx}:{os.path.basename(img_path)}'
insert_image_centered(doc, img_path, width_cm=width_cm, caption=caption)
print(f'已插入:{os.path.basename(img_path)}')
doc.save(docx_path)
print(f'\n全部完成,共插入 {len(image_files)} 张图片,保存为:{docx_path}')
if __name__ == '__main__':
batch_insert_images(
docx_path='图片合集.docx',
image_folder='./images',
width_cm=14 # 图片统一宽度14厘米,A4纸正文宽度约16厘米,留边距
)
代码讲解
run.add_picture(image_path, width=Cm(15), height=Cm(10))是插入图片的核心方法,width和height二选一即可,只设宽度高度按比例自动缩放,两个都设会强制拉伸变形。- 用Pillow的
Image.open()读取图片原始宽高,按你指定的宽度比例算出高度,保证图片不变形。 - 图片段落设为居中对齐,图注用小字号斜体居中,放在图片下方,符合常规文档排版习惯。
os.listdir配合sorted()按文件名排序插入,如果你想按1、2、3编号命名图片,插出来的顺序就是编号顺序。- 支持常见图片格式:jpg、jpeg、png、gif、bmp,自动过滤非图片文件。
运行结果
运行脚本后在当前目录生成图片合集.docx,打开可以看到所有图片按文件名顺序排列,每张图片居中、宽度统一,图片下方有小字图注标明文件名。控制台逐张打印插入进度。
注意事项
- 图片路径不要有中文空格,Windows下路径含中文一般没问题,但建议用英文路径更稳妥。
- python-docx插入图片时会把图片完整嵌入docx,几十张高清图会让docx文件变大,可以先压缩图片再插入。
- GIF动图插入后只显示第一帧,不会动。
- 如果要插入到文档中间指定位置,需要用
document.paragraphs[index]._p.addnext(run._r)这种XML层操作,初学者建议直接在文档末尾追加。

更新时间:2026-09-14 21:47:08
下一篇: