通过Python编程实现Word文档中图片的动态管理,可精准实现图片的插入定位、条件化替换及冗余元素删除,尤其适用于需要定期生成标准化Word文档。这种自动化方案不仅显著降低人工操作导致的格式错位、版本混乱等风险,还能通过API接口与数据库、图像处理系统无缝集成,为构建端到端的智能文档生成体系奠定基础。本文将介绍如何使用Python在Word文档中添加、替换和删除图片

  • 用Python插入图片到Word文档
  • 用Python替换Word文档中的图片为新的图片
  • 用Python替换Word文档中的图片为文本
  • 用Python删除Word文档中的图片

本文所使用的方法需要用到免费的Free Spire.Doc for Python,PyPI:pip install spire.doc

用Python插入图片到Word文档

我们可以通过库中提供的Paragraph.AppendPicture(string: fileName)方法从指定路径插入图片到Word文档中的指定段落,并可使用DocPicture类下的属性对图像的大小、位置和文字环绕方式等进行设置。以下是操作步骤:

  1. 导入所需模块。
  2. 创建Document对象,从而新建Word文档。
  3. 使用Document.AddSection()方法在文档中添加节,并设置格式。
  4. 使用Section.AddParagraph()方法在节中添加段落,使用Paragraph.AppendText()方法在段落中添加文本,并设置格式。
  5. 使用Paragraph.AppendPicture()方法在段落中添加图片。
  6. 使用DocPicture类下的属性设置图片属性:

    • 使用WidthHeight属性设置图片大小。
    • 使用HorizontalPositionVerticalPosition属性设置图片的位置。
    • 使用TextWrappingStyle属性设置图片的文字环绕方式。
  7. 使用Document.SaveToFile()方法保存文档。
  8. 释放资源。

代码示例:

from spire.doc import Document, TextWrappingStyle, FileFormat

# 创建Document对象,从而新建Word文档
doc = Document()

# 在文档中添加一个节,并设置页边距
section = doc.AddSection()
section.PageSetup.Margins.All = 72

# 在节中添加段落,在段落中添加文本
para = section.AddParagraph()
textRange = para.AppendText("Document Introduction")
textRange.CharacterFormat.FontName = "Arial"
textRange.CharacterFormat.FontSize = 16
textRange.CharacterFormat.Bold = True

# 添加段落,并添加图片到段落中
para1 = section.AddParagraph()
pic = para1.AppendPicture("Word.png")

# 设置图片尺寸
pic.Width = 64
pic.Height = 64

# 设置图片位置(可选)
pic.HorizontalPosition = 360
pic.VerticalPosition = 10

# 设置图片文本环绕方式
pic.TextWrappingStyle = TextWrappingStyle.Square

# 添加文本并设置格式
textRange2 = para1.AppendText("This document serves as a structured repository of critical information, designed to facilitate clear communication, collaborative workflows, and long-term knowledge retention. Its architecture prioritizes accessibility, with a navigable hierarchy of headings, cross-referenced sections, and embedded metadata to streamline information retrieval.")
textRange2.CharacterFormat.FontName = "Arial"
textRange2.CharacterFormat.FontSize = 12

# 保存文档
doc.SaveToFile("output/AddPicToWord.docx", FileFormat.Docx2019)
doc.Dispose()

结果文档
Python在Word文档中添加图片

用Python替换Word文档中的图片为新的图片

我们可以通过判断段落的各个子对象的DocumentObjectType属性是否为DocumentObjectType.Picture来找出文档中的所有图片。然后,我们可以将图片子对象转换为DocPicture,再使用DocPicture.LoadImage()方法使用指定的图片替换原图片。替换后的图片将保留原图片的位置和文本环绕方式属性,图片大小可设置为原图片的大小。以下是操作步骤:

  1. 导入所需模块。
  2. 创建Document对象,使用Document.LoadFromFile()方法载入Word文档。
  3. 依次遍历文档中的节、节中的段落以及段落中的子对象,判断每个子对象的DocumentObjectType属性是否为DocumentObjectType.Picture,将判断成功的对象添加到列表中。
  4. 将图片子对象转换为DocPicture,再使用DocPicture.LoadImage()方法使用指定的图片替换原图片。
  5. 使用Document.SaveToFile()方法保存文档。
  6. 释放资源。

代码示例:

from spire.doc import Document, DocumentObjectType, DocPicture

# 创建Document对象
doc = Document()

# 加载Word文档
doc.LoadFromFile("output/AddPicToWord.docx")

# 创建一个列表来存储图片
pictures = []

# 遍历文档中的所有节
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:
                pictures.append(docObj)

# 用新图片替换列表中的第一张图片
picture = DocPicture(pictures[0])
width = picture.Width
height = picture.Height
picture.LoadImage("NewWord.png")

# 修改图片的尺寸
picture.Width = width
picture.Height = height

# 保存结果文档
doc.SaveToFile("output/ReplaceWordImage.docx")
doc.Close()

结果文档
Python替换Word文档图片为新图片

用Python替换Word文档中的图片为文本

我们还可以在找出图片子对象后,使用Paragraph.ChildObjects.Insert(Index, TextRange)方法在其位置插入文本,并使用Paragraph.ChildObjects.Remove()方法将图片子对象删除,从而实现图片到文本的替换。以下是操作步骤:

  1. 导入所需模块。
  2. 创建Document对象,使用Document.LoadFromFile()方法载入Word文档。
  3. 依次遍历文档中的节、节中的段落以及段落中的子对象,判断每个子对象的DocumentObjectType属性是否为DocumentObjectType.Picture,将判断成功的对象添加到列表中。
  4. 通过创建TextRange对象创建文本,设置文字及其格式。
  5. 使用Paragraph.ChildObjects.IndexOf()方法获取图片子对象在段落中的索引。
  6. 使用Paragraph.ChildObjects.Insert()方法将文本插入到段落中相应位置。
  7. 使用Paragraph.ChildObjects.Remove()方法删除图片子对象。
  8. 使用Document.SaveToFile()方法保存文档。
  9. 释放资源。

代码示例:

from spire.doc import Document, DocumentObjectType, TextRange, Color

# 创建Document对象
doc = Document()

# 加载Word文档
doc.LoadFromFile("output/AddPicToWord.docx")

# 遍历文档中的所有节
for k in range(doc.Sections.Count):
    sec = doc.Sections.get_Item(k)

    # 遍历每一节中的所有段落
    for m in range(sec.Paragraphs.Count):
        para = sec.Paragraphs.get_Item(m)

        # 创建一个列表来存储图片
        pictures = []

        # 查找图片并将其添加到列表中
        for x in range(para.ChildObjects.Count):
            docObj = para.ChildObjects.get_Item(x)
            if docObj.DocumentObjectType == DocumentObjectType.Picture:
                pictures.append(docObj)

        # 遍历列表中的所有图片,并用文本替换它们
        for pic in pictures:
            # 获取图片的索引位置
            index = para.ChildObjects.IndexOf(pic)
            # 创建一个TextRange对象
            textRange = TextRange(doc)
            textRange.Text = "Word Document "
            textRange.CharacterFormat.FontName = "Arial"
            textRange.CharacterFormat.FontSize = 20
            textRange.CharacterFormat.TextColor = Color.get_Red()
            # 将文本插入到段落中
            para.ChildObjects.Insert(index, textRange)
            # 删除图片
            para.ChildObjects.Remove(pic)

# 保存结果文档
doc.SaveToFile("output/ReplaceWordImageWithText.docx")
doc.Close()

结果文档
Python替换Word文档图片为文本

用Python删除Word文档中的图片

在找出文档中的图片子对象后,我们可以直接使用Paragraph.ChildObjects.Remove()方法删除图片子对象,从而删除Word文档中的图片。以下是操作步骤:

  1. 导入所需模块。
  2. 创建Document对象,使用Document.LoadFromFile()方法载入Word文档。
  3. 依次遍历文档中的节、节中的段落以及段落中的子对象,判断每个子对象的DocumentObjectType属性是否为DocumentObjectType.Picture,将判断成功的对象添加到列表中。
  4. 使用Paragraph.ChildObjects.IndexOf()方法获取图片子对象在段落中的索引。
  5. 使用Paragraph.ChildObjects.Remove()方法删除图片子对象。
  6. 使用Document.SaveToFile()方法保存文档。
  7. 释放资源。

代码示例:

from spire.doc import Document, DocumentObjectType, TextRange, Color

# 创建Document对象
doc = Document()

# 加载Word文档
doc.LoadFromFile("output/AddPicToWord.docx")

# 遍历文档中的所有节
for k in range(doc.Sections.Count):
    sec = doc.Sections.get_Item(k)

    # 遍历每一节中的所有段落
    for m in range(sec.Paragraphs.Count):
        para = sec.Paragraphs.get_Item(m)

        # 创建一个列表来存储图片
        pictures = []

        # 查找图片并将其添加到列表中
        for x in range(para.ChildObjects.Count):
            docObj = para.ChildObjects.get_Item(x)
            if docObj.DocumentObjectType == DocumentObjectType.Picture:
                pictures.append(docObj)

        # 遍历列表中的所有图片,并用文本替换它们
        for pic in pictures:
            # 获取图片的索引位置
            index = para.ChildObjects.IndexOf(pic)
            # 删除图片子对象
            para.ChildObjects.Remove(pic)

# 保存结果文档
doc.SaveToFile("output/RemoveWordImage.docx")
doc.Close()

结果文档
Python删除Word文档图片

本文演示了如何使用Python在Word文档中添加、替换以及删除图片,提供步骤介绍和代码示例。


大丸子
72 声望6 粉丝