首页 > 编程语言 >Python轻松获取Word文本框文字和图片

Python轻松获取Word文本框文字和图片

来源:互联网 2026-07-31 16:47:04

使用Python的Spire.Doc库可通过遍历文本框对象模型,提取其中的段落文字、表格数据及图片。通过判断子对象类型,读取文字或表格单元格内容,利用ImageBytes属性导出图片。该方法支持嵌套文本框和编码处理,适用于文档自动化迁移与归档。

Word文档中的文本框功能非常实用,能够将独立的文字段落、表格甚至图片整合在一起,放置在文档中的任意位置。然而,在实际工作中(如文档迁移、数据归档或批量处理),经常需要将文本框内的文字和图片提取出来。与正文不同,文本框内容不属于文档主段落流,需要通过专门的文档对象模型进行遍历和访问。本文将介绍如何使用Python系统性地提取Word文本框中的文字、表格数据和嵌入图片。

环境准备与安装

本次使用的工具是Spire.Doc for Python。该库提供完整的文档对象模型,能够方便地遍历文本框中的子对象,并按类型分别处理。安装命令如下:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

pip install Spire.Doc

安装完成后,在脚本中导入所需模块即可开始使用。

from spire.doc import *
from spire.doc.common import *

遍历文本框并提取文字

在Spire.Doc的对象模型中,文本框对应TextBox类型,其内部内容通过Body属性暴露,结构与文档主体类似。文本框内可能包含段落或嵌套表格,因此需要遍历ChildObjects集合,并根据每个子对象的DocumentObjectType判断处理方式。这种逐层遍历的方法能够确保不遗漏任何嵌套结构中的文字。

from spire.doc import *
from spire.doc.common import *

inputFile = "/文本框.docx"
outputFile = "ExtractedText.txt"

# 加载文档
document = Document()
document.LoadFromFile(inputFile)

# 检查文档中是否包含文本框
if document.TextBoxes.Count > 0:
    with open(outputFile, 'w', encoding='utf-8') as sw:
        for i in range(document.TextBoxes.Count):
            textbox = document.TextBoxes.get_Item(i)
            # 遍历文本框内的子对象
            for j in range(textbox.Body.ChildObjects.Count):
                obj = textbox.Body.ChildObjects.get_Item(j)
                # 提取段落文字
                if obj.DocumentObjectType == DocumentObjectType.Paragraph:
                    para = obj if isinstance(obj, Paragraph) else None
                    sw.write(para.Text + "n")
                # 提取表格中的文字
                if obj.DocumentObjectType == DocumentObjectType.Table:
                    table = obj if isinstance(obj, Table) else None
                    for row_idx in range(table.Rows.Count):
                        row = table.Rows[row_idx]
                        for cell_idx in range(row.Cells.Count):
                            cell = row.Cells[cell_idx]
                            for para_idx in range(cell.Paragraphs.Count):
                                para = cell.Paragraphs.get_Item(para_idx)
                                sw.write(para.Text + "t")
                        sw.write("n")

document.Close()

Python轻松获取Word文本框文字和图片

这段代码的逻辑清晰:首先通过document.TextBoxes获取文档中所有文本框,然后对每个文本框使用Body.ChildObjects遍历内部子对象。遇到Paragraph类型时直接读取Text属性;遇到Table类型时进一步遍历行、单元格、段落,逐个提取文字。为保留表格结构,同一行不同单元格内容用制表符t分隔,不同行用换行符n分隔,提取出的文本便于后续处理。

从文本框中读取表格数据

当明确知道文本框内是表格,并且希望以更结构化的方式读取时,可以直接通过Body.Tables集合访问,无需遍历ChildObjects。这种方法更直接,适合对文本框内部结构熟悉的场景。

from spire.doc import *
from spire.doc.common import *

inputFile = "./Data/TextBoxTable.docx"
outputFile = "TableFromTextBox.txt"

# 加载文档
doc = Document()
doc.LoadFromFile(inputFile)

# 获取第一个文本框
textbox = doc.TextBoxes[0]

# 获取文本框中的第一个表格
table = textbox.Body.Tables[0] if isinstance(textbox.Body.Tables[0], Table) else None

result = ""
for i in range(table.Rows.Count):
    row = table.Rows.get_Item(i)
    for j in range(row.Cells.Count):
        cell = row.Cells.get_Item(j)
        for k in range(cell.Paragraphs.Count):
            paragraph = cell.Paragraphs.get_Item(k)
            result += paragraph.Text + "t"
    result += "n"

with open(outputFile, 'w', encoding='utf-8') as fp:
    fp.write(result)

doc.Close()

这段代码更简洁:直接通过doc.TextBoxes[0]获取第一个文本框,再通过textbox.Body.Tables[0]获取其中的第一个表格,然后按行→单元格→段落的层次遍历,拼出每个单元格的文字。如果表格位置固定,这种写法可节省大量遍历开销。

提取文本框中的图片

文本框中的图片在Spire.Doc中表示为DocPicture对象,其ImageBytes属性存储图片的二进制数据。提取图片的思路与提取文字类似:遍历文本框的子对象,发现类型为Picture时读取ImageBytes并写入文件。需要注意的是,图片通常嵌套在段落中,因此需要递归遍历所有层级的子对象。

from spire.doc import *
from spire.doc.common import *
import os

inputFile = "./Data/TextBoxWithImages.docx"
outputDir = "ExtractedImages/"

if not os.path.exists(outputDir):
    os.makedirs(outputDir)

# 加载文档
document = Document()
document.LoadFromFile(inputFile)

image_index = 0

# 遍历所有文本框
for i in range(document.TextBoxes.Count):
    textbox = document.TextBoxes.get_Item(i)
    # 遍历文本框中的子对象
    for j in range(textbox.Body.ChildObjects.Count):
        obj = textbox.Body.ChildObjects.get_Item(j)
        # 检查是否为段落,图片通常嵌套在段落中
        if obj.DocumentObjectType == DocumentObjectType.Paragraph:
            para = obj if isinstance(obj, Paragraph) else None
            for k in range(para.ChildObjects.Count):
                child = para.ChildObjects.get_Item(k)
                if child.DocumentObjectType == DocumentObjectType.Picture:
                    picture = child if isinstance(child, DocPicture) else None
                    # 获取图片二进制数据并保存
                    image_bytes = picture.ImageBytes
                    image_path = os.path.join(outputDir, f"Image-{image_index}.png")
                    with open(image_path, 'wb') as img_file:
                        img_file.write(image_bytes)
                    image_index += 1
                    print(f"已保存图片: {image_path}")

document.Close()

Python轻松获取Word文本框文字和图片

这段代码遍历文档中所有文本框,对每个文本框内的段落进一步遍历其ChildObjects集合。一旦发现子对象类型为Picture,则将其转换为DocPicture对象,通过ImageBytes获取原始图片字节流,并以PNG格式写入文件。ImageBytes返回的是原始图片字节数据,默认以PNG保存;若原始图片为JPEG等其他格式,可根据实际需求修改文件扩展名。每个图片文件用序号命名,避免重名冲突。

实用技巧

同时提取文字和图片

实际应用中,文本框内常混合文字和图片。可将文字和图片的提取逻辑整合到一个遍历流程中:外层遍历到段落时,既提取段落文字,又检查段落内是否有图片子对象。这样一次遍历即可完成所有内容提取,效率更高。

处理嵌套文本框

Word文档支持文本框嵌套(一个文本框内可能包含另一个文本框)。若提取过程中遇到DocumentObjectType.TextBox类型的子对象,需对其Body进行递归遍历,确保所有层级的内容都被提取。编写递归函数处理该逻辑是一个不错的选择。

编码与换行处理

提取的文字写入文件时,建议统一使用UTF-8编码(encoding='utf-8'),避免中文等非ASCII字符出现乱码。此外,不同操作系统的换行符不同——Windows使用\r\n,Linux/macOS使用\n。若需在特定平台正确显示,可针对性地调整换行符格式。

总结

本文介绍了如何使用Python结合Spire.Doc库从Word文档的文本框中提取文字和图片。通过遍历文本框对象,结合文档结构,可识别并读取其中的段落、表格等文本内容;同时利用图片对象的ImageBytes属性,实现文本框内图片的导出。此外,还讨论了嵌套文本框、编码处理、换行符解析等常见场景的处理方法。虽然文本框内容不属于文档正文流,但借助Spire.Doc提供的对象模型,仍可灵活访问和提取它们。掌握这些方法后,可进一步应用于Word文档归档、数据迁移、内容分析以及批量文档处理等自动化场景。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备2026025700号-3 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。