Word文档标题关联图片提取工具实现原理
一、核心功能概述
该代码实现从Word文档中精准提取指定标题章节下的所有图片,主要服务于以下场景:
- 自动抓取需求文档"界面原型"章节的UI设计图
- 提取测试案例文档中的流程图/架构图
- 批量导出合规文档的签章图片
二、代码执行流程图解
三、关键代码模块详解
- XML命名空间配置
namespace = {
'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
'v': "urn:schemas-microsoft-com:vml",
'wp': "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing",
'a': "http://schemas.openxmlformats.org/drawingml/2006/main",
'pic': "http://schemas.openxmlformats.org/drawingml/2006/picture"
}
- 作用:定义Word文档底层XML结构的命名空间映射
- 技术细节:兼容不同版本Office生成的文档格式,确保能正确解析微软和WPS等软件创建的文档
- 标题匹配逻辑
for par in doc.paragraphs:
for title in target_title_list:
if title in par.text and 'toc' not in par.style.name.lower() and is_heading_enhanced(par):
found_start = True
break
- 执行流程:
- 遍历文档所有段落(paragraphs)
- 检查段落文本是否包含目标标题关键字
- 通过
is_heading_enhanced
函数验证段落样式是否为真实标题 - 排除目录项('toc’样式)
- 递归图片搜索算法
def get_img(root_element, target_tag, target_attribute, out_list):
for child in root_element:
if tag in target_tag and target_attribute in child.attrib.keys():
out_list.append(child.attrib[target_attribute])
else:
get_img(child, target_tag, target_attribute, out_list)
- 设计亮点:
- 深度优先遍历XML节点树
- 动态匹配两种图片标识格式:
- VML格式:
<v:imagedata r:id="rId8">
- DrawingML格式:
<a:blip r:embed="rId8">
- VML格式:
- 图片二进制处理
img_part = doc.part.related_parts[id]
img_binary = img_part.blob # 获取原始二进制数据
img = cv2.imdecode(np.frombuffer(img_binary, np.uint8), cv2.IMREAD_COLOR)
- 关键技术点:
- 通过
related_parts
获取文档包内嵌资源 - 使用OpenCV进行图片解码,兼容JPG/PNG/BMP等格式
- 自动处理图片方向元数据
- 通过
四、代码特性总结
-
格式兼容性
支持解析以下图片嵌入形式:- 直接插入的本地图片
- 复制粘贴的位图
- 从其他文档链接的图片
- 使用形状工具修饰的图片
-
样式过滤机制
采用双重验证确保定位到真实内容区域:- 文本内容包含目标关键字
- 段落样式通过标题特征校验(字号/加粗/样式名)
-
性能优化设计
- 惰性加载:仅处理目标区域XML数据
- 增量解析:遇到目标标题后开始采集,遇到下个标题停止
- 内存复用:流式处理图片保存
五、输入输出说明
参数说明:
def get_target_pic(file, target_title):
"""
:param file: Word文档路径(.docx格式)
:param target_title: 目标标题关键字,支持逗号分隔多个关键字
:return: 图片本地路径列表 或 None
"""
输出示例:
[
'/docs/需求文档/img0.jpg',
'/docs/需求文档/img1.jpg',
'/docs/需求文档/img2.jpg'
]
六、扩展应用场景
-
自动化测试验证
对比需求文档与测试环境的实际界面截图 -
文档合规检查
验证敏感文档中的公司LOGO、签名章等图片是否符合规范 -
知识库构建
自动抽取技术文档中的架构图生成图库索引
该实现方案直接操作Word底层XML结构,避免了GUI操作的不稳定性,特别适合集成到持续集成流水线中,实现文档图片的自动化验证流程。