我的知识记录

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))是插入图片的核心方法,widthheight二选一即可,只设宽度高度按比例自动缩放,两个都设会强制拉伸变形。
  • 用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层操作,初学者建议直接在文档末尾追加。

Python Word批量插入图片教程

标签:

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

上一篇:Python Word插入表格教程:带样式数据填充

下一篇: