You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化图片转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调用:
    1. 打开Word,录制一个宏:设置文档标签为「Internal」,然后导出为PDF
    2. 用Python的win32com.client库调用Word应用,打开目标文档后执行该宏
  • 简化手动操作:把「设置Internal标签」和「导出PDF」的操作添加到Word快速访问工具栏,点击两次就能完成,比手动找菜单高效很多

内容的提问来源于stack exchange,提问作者Jace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:03:25