python-docx的add_picture()是否存在fit-to-page属性实现图片自适应页面
Python-docx插入图片自适应页面尺寸解决方案
核心逻辑为获取当前页面可编辑区域的尺寸,结合图片原始宽高比动态计算缩放参数,无需硬编码固定尺寸。
完整实现代码
import os from docx import Document # 初始化文档对象(保留你原有代码的doc定义即可) doc = Document() # 1. 计算页面可编辑区域的宽高(默认取第一节的页面配置,多节场景可自行调整索引) current_section = doc.sections[0] available_width = current_section.page_width - current_section.left_margin - current_section.right_margin available_height = current_section.page_height - current_section.top_margin - current_section.bottom_margin # 2. 插入段落和图片,不指定固定尺寸,读取图片原始宽高 p1 = doc.add_paragraph(' ') pic = doc.add_picture(os.path.join(base_path, fi)) para = doc.paragraphs[-1] # 3. 等比例缩放图片,保证不超出页面可编辑区域 img_original_width = pic.width img_original_height = pic.height # 取最小缩放比例,确保宽高都不会超出页面边界 scale_ratio = min(available_width / img_original_width, available_height / img_original_height) # 仅当图片大于页面可编辑区域时缩放,小图保留原始尺寸,不需要可删除该判断 if scale_ratio < 1: pic.width = int(img_original_width * scale_ratio) pic.height = int(img_original_height * scale_ratio)
补充说明
- 若希望所有图片都撑满页面宽度,无论原图大小,直接删除
if scale_ratio < 1:的判断即可 - 文档存在多个节时,插入图片到对应节只需将
doc.sections[0]的索引修改为目标节的序号即可 - 方案自动适配页面边距配置,默认模板、自定义模板均可正常使用
内容的提问来源于stack exchange,提问作者Solomon Raja
相关产品推荐
相关产品推荐

