如何优化图片转Word并保存的Python代码?新手求改进建议
代码优化及AIP转PDF问题处理
代码优化方案
你的代码核心逻辑没问题,但重复代码较多且存在小瑕疵,以下是优化后的版本和具体优化点:
优化后代码
# 导入必要库(移除无用的lib2to3依赖) from docx import Document from docx.shared import Inches from docx.enum.text import WD_ALIGN_PARAGRAPH from pdf2image import convert_from_path from PIL import Image # PDF转图片:仅保留第一页(避免多页PDF覆盖输出的SOA.jpg) pdf_pages = convert_from_path('SOA.pdf') pdf_pages[0].save('SOA.jpg', 'JPEG') def add_centered_image(doc, img_path, scale=260): """封装插入居中图片的逻辑,scale为缩放系数""" # 创建段落并插入图片 para = doc.add_paragraph() run = para.add_run() img = Image.open(img_path) run.add_picture(img_path, width=Inches(img.width/scale), height=Inches(img.height/scale)) # 设置段落居中 para.alignment = WD_ALIGN_PARAGRAPH.CENTER # 初始化Word文档 doc = Document() # 调用函数插入两张图片 add_centered_image(doc, 'receipt.jpg') add_centered_image(doc, 'SOA.jpg') # 保存文档 doc.save('Receipt and SOA.docx')
关键优化点
- 移除冗余依赖:删掉了没用的
from lib2to3.pytree import convert导入 - 封装重复逻辑:把「插入图片+居中」的重复代码写成函数
add_centered_image,后续新增图片只需调用函数,无需重复编写逻辑 - 修复居中错误:原代码中处理SOA.jpg居中时误用
paragraphs[-2],会误选中receipt的段落,封装函数后自动解决该问题 - 简化变量管理:无需单独存储每个图片的宽高,在函数内直接读取并处理
- 优化PDF转图片逻辑:默认只取PDF第一页保存(若你的PDF有多页,可修改代码循环保存所有页,或添加提示避免覆盖)
Azure信息保护(AIP)转PDF问题处理
由于AIP的权限限制,直接用docx2pdf这类库自动转PDF会被拦截,目前可以通过两种方式减少手动操作:
- VBA宏+Python调用:
- 打开Word,录制一个宏:设置文档标签为「Internal」,然后导出为PDF
- 用Python的
win32com.client库调用Word应用,打开目标文档后执行该宏
- 简化手动操作:把「设置Internal标签」和「导出PDF」的操作添加到Word快速访问工具栏,点击两次就能完成,比手动找菜单高效很多
内容的提问来源于stack exchange,提问作者Jace
相关产品推荐
相关产品推荐

