在 word 文档的日常处理中,插入图片是一项高频操作。无论是生成产品说明书、制作报告封面,还是在合同模板中嵌入公司 logo,图片都是传达信息的重要载体。然而,当需要批量生成包含图片的文档时,手动操作不仅效率低下,还容易出现尺寸不一致、位置偏移等问题。通过 python 编程方式向 word 文档中插入图片,可以精确控制图片的大小、位置、文字环绕方式等属性,实现文档的自动化生成。本文将介绍如何使用 python 在 word 文档中插入图片,并涵盖位置控制、文字环绕、批量添加和透明色设置等常用操作。
环境准备
本文使用 spire.doc for python 库来操作 word 文档。该库提供了 appendpicture() 和 docpicture 等接口,支持在段落级别和文档级别插入图片,并允许对图片的尺寸、位置、环绕样式进行精细配置。通过以下命令安装:
pip install spire.doc
安装完成后,在脚本中导入所需模块即可开始使用。
基本图片插入
在 word 文档中插入图片最直接的方式是调用段落的 appendpicture() 方法。该方法接收一个图片文件路径,会在段落末尾追加一个图片对象,并返回该对象的引用,以便后续对图片属性进行设置。这种方式适合在新建文档中按顺序追加图文内容。
from spire.doc import *
from spire.doc.common import *
outputfile = "/insertimage.docx"
# 创建文档并添加节
document = document()
section = document.addsection()
# 添加段落并插入图片
paragraph = section.addparagraph()
paragraph.format.horizontalalignment = horizontalalignment.left
picture = paragraph.appendpicture("logo1.png")
# 设置图片大小
picture.width = 80
picture.height = 50
# 添加说明文字
paragraph = section.addparagraph()
paragraph.format.linespacing = 20
tr = paragraph.appendtext("以上为插入的示例图片。")
tr.characterformat.fontname = "宋体"
tr.characterformat.fontsize = 14
document.savetofile(outputfile, fileformat.docx)
document.close()

上述代码通过 document() 创建一个空白文档,调用 addsection() 添加节后,在节中新增段落并调用 appendpicture() 插入图片。返回的 picture 对象支持 width 和 height 属性,单位为磅。如果不设置这两个属性,图片将以原始尺寸显示,可能导致图片过大而影响排版,因此在实际使用中建议根据文档版式统一指定尺寸。
使用 docpicture 控制位置与环绕
appendpicture() 方法虽然简单,但图片会跟随段落流式排列,无法精确控制其在页面中的绝对位置。当需要将图片放置在页面的指定坐标,或设置文字环绕效果时,应使用 docpicture 对象。docpicture 是 spire.doc 中表示文档图片的核心类,支持设置 horizontalposition、verticalposition 以及 textwrappingstyle 等高级属性。
from spire.doc import *
from spire.doc.common import *
inputfile = "/示例文档.docx"
outputfile = "/insertimagewithposition.docx"
# 加载文档
doc = document()
doc.loadfromfile(inputfile)
# 获取一个节
section = doc.sections[0]
# 创建图片对象并加载图片文件
picture = docpicture(doc)
picture.loadimage("/logo1.png")
# 设置纵向与横向的定位基准为“页面”
picture.verticalorigin = verticalorigin.page
picture.horizontalorigin = horizontalorigin.page
# 设置图片在页面中的绝对位置
picture.horizontalposition = 100
picture.verticalposition = 120
# 设置图片尺寸
picture.width = 80
picture.height = 50
# 设置文字环绕样式
picture.textwrappingstyle = textwrappingstyle.through
# 将图片插入到指定段落的起始位置
paragraph = section.addparagraph()
paragraph.childobjects.insert(0, picture)
doc.savetofile(outputfile, fileformat.docx)
doc.close()

这段代码的关键在于通过 docpicture(doc) 创建独立的图片对象,再调用 loadimage() 加载图片文件。horizontalposition 和 verticalposition 分别指定图片左上角的水平和垂直坐标,单位为磅。textwrappingstyle 属性决定文字如何围绕图片排列,through 表示文字穿透环绕,还有 square(四周环绕)、topandbottom(上下环绕)、behind(衬于文字下方)等多种可选值。最后通过 childobjects.insert() 将图片插入到段落的指定位置,实现精确的插入点控制。
在每一页添加图片
在某些场景下,如添加公司 logo 或水印图片,需要让图片出现在文档的每一页中。由于 word 的页面内容是动态流动的,无法直接在每一页上插入图片。解决思路是将图片放置在页眉或页脚中——页眉页脚的内容会自动在每一页重复显示。通过设置图片的 verticalorigin 和 horizontalorigin 为 page,可以将图片相对于页面进行定位,从而突破页眉页脚的默认区域限制。
from spire.doc import * from spire.doc.common import * inputfile = "/参考文档.docx" outputfile = "addimagetoeachpage.docx" # 打开 word 文档 document = document() document.loadfromfile(inputfile) imgpath = "logo1.png" # 在页脚中添加图片并设置位置 picture = document.sections[0].headersfooters.footer.addparagraph().appendpicture(imgpath) # 将图片的原点设为页面,使图片可以在整个页面范围内定位 picture.verticalorigin = verticalorigin.page picture.horizontalorigin = horizontalorigin.page picture.verticalalignment = shapeverticalalignment.bottom picture.textwrappingstyle = textwrappingstyle.none document.savetofile(outputfile, fileformat.docx) document.close()

上述代码在文档第一节(sections[0])的页脚(footer)中添加段落并插入图片。默认情况下,页脚中的图片只能出现在页脚区域内,但通过将 verticalorigin 和 horizontalorigin 设置为 page,图片的坐标参考系从页脚区域切换为整个页面,此时 verticalalignment.bottom 会将图片固定在页面底部。textwrappingstyle.none 表示图片不与正文文字产生环绕关系,避免影响正文的排版布局。
设置图片的透明色
在某些设计场景中,可能需要将图片中的某种背景色设为透明,使图片与文档背景融合。spire.doc 提供了 transparentcolor 属性,可以将图片中指定的纯色像素变为透明。这一功能适用于处理具有单色背景的 logo 或图标。
from spire.doc import *
from spire.doc.common import *
inputfile = "./data/imagetemplate.docx"
outputfile = "settransparentcolor.docx"
# 加载文档
doc = document()
doc.loadfromfile(inputfile)
# 获取第一节的第一段
paragraph = doc.sections[0].paragraphs[0]
# 遍历段落中的子对象,找到图片并设置透明色
for k in range(paragraph.childobjects.count):
obj = paragraph.childobjects.get_item(k)
if isinstance(obj, docpicture):
picture = obj
picture.transparentcolor = color.get_blue()
doc.savetofile(outputfile, fileformat.docx)
doc.close()
这段代码遍历段落中的所有子对象,通过 isinstance(obj, docpicture) 判断是否为图片类型。找到图片后,将 transparentcolor 设置为蓝色(color.get_blue()),图片中所有与该颜色匹配的像素将变为透明。需要注意,透明色匹配是基于精确颜色值的,如果图片中的背景色与目标颜色存在细微色差,可能无法完全去除,建议在图片制作阶段尽量使用纯色背景。
实用技巧
调整已有图片的尺寸
对于已存在图片的文档,可以通过遍历段落的 childobjects 集合来定位图片并重置其尺寸,这在批量统一文档中图片大小的场景中非常实用。
from spire.doc import *
from spire.doc.common import *
inputfile = "./data/imagetemplate.docx"
outputfile = "resetimagesize.docx"
doc = document()
doc.loadfromfile(inputfile)
section = doc.sections[0]
paragraph = section.paragraphs[0]
# 重置段落中第一张图片的尺寸
for i in range(paragraph.childobjects.count):
docobj = paragraph.childobjects.get_item(i)
if isinstance(docobj, docpicture):
picture = docpicture(docobj)
picture.width = 50
picture.height = 50
break
doc.savetofile(outputfile, fileformat.docx)
doc.close()
上述代码通过 docpicture(docobj) 将已有的文档对象转换为图片对象,再设置 width 和 height 属性。结合循环遍历所有段落,即可实现文档中全部图片的尺寸统一调整。
设置文字环绕类型
除了 textwrappingstyle 之外,textwrappingtype 属性可以进一步控制文字环绕的具体方式。例如 textwrappingtype.both 表示文字从图片的两侧环绕,适用于居中放置的图片。
for i in range(doc.sections.count):
sec = doc.sections.get_item(i)
for j in range(sec.paragraphs.count):
para = sec.paragraphs.get_item(j)
for k in range(para.childobjects.count):
docobj = para.childobjects.get_item(k)
if docobj.documentobjecttype == documentobjecttype.picture:
picture = docobj
picture.textwrappingstyle = textwrappingstyle.through
picture.textwrappingtype = textwrappingtype.both
这段代码遍历文档中所有节、所有段落中的图片对象,统一设置环绕样式为 through 并指定环绕类型为 both,使文字从图片左右两侧同时环绕。
总结
本文介绍了使用 python 在 word 文档中精准插入与定位图片的方法。通过灵活配置图片的尺寸、文字环绕样式及透明度等属性,能够实现图文混排的全自动化,大幅提升排版效率,满足不同场景下的文档设计需求。
以上就是使用python实现快速在word文档中插入图片的详细内容,更多关于python word插入图片的资料请关注代码网其它相关文章!
发表评论