当前位置: 首页 > news >正文

Word文档标题关联图片提取工具实现原理

一、核心功能概述

该代码实现从Word文档中精准提取指定标题章节下的所有图片,主要服务于以下场景:

  • 自动抓取需求文档"界面原型"章节的UI设计图
  • 提取测试案例文档中的流程图/架构图
  • 批量导出合规文档的签章图片
二、代码执行流程图解
加载Word文档
解析目标标题
遍历段落匹配标题
提取关联XML数据
递归搜索图片标识
解析图片二进制数据
解码保存图片文件
三、关键代码模块详解
  1. 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等软件创建的文档
  1. 标题匹配逻辑
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
  • 执行流程
    1. 遍历文档所有段落(paragraphs)
    2. 检查段落文本是否包含目标标题关键字
    3. 通过is_heading_enhanced函数验证段落样式是否为真实标题
    4. 排除目录项('toc’样式)
  1. 递归图片搜索算法
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">
  1. 图片二进制处理
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等格式
    • 自动处理图片方向元数据
四、代码特性总结
  1. 格式兼容性
    支持解析以下图片嵌入形式:

    • 直接插入的本地图片
    • 复制粘贴的位图
    • 从其他文档链接的图片
    • 使用形状工具修饰的图片
  2. 样式过滤机制
    采用双重验证确保定位到真实内容区域:

    • 文本内容包含目标关键字
    • 段落样式通过标题特征校验(字号/加粗/样式名)
  3. 性能优化设计

    • 惰性加载:仅处理目标区域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'
]
六、扩展应用场景
  1. 自动化测试验证
    对比需求文档与测试环境的实际界面截图

  2. 文档合规检查
    验证敏感文档中的公司LOGO、签名章等图片是否符合规范

  3. 知识库构建
    自动抽取技术文档中的架构图生成图库索引

该实现方案直接操作Word底层XML结构,避免了GUI操作的不稳定性,特别适合集成到持续集成流水线中,实现文档图片的自动化验证流程。

http://www.dtcms.com/a/67706.html

相关文章:

  • React学习笔记15
  • MySQL行列转化
  • Vision Mamba论文精读笔记
  • 基于Redis实现限流的几种方式
  • MySQL 连接的使用
  • 嵌入式Zephyr RTOS面试题及参考答案
  • 【原创】springboot+vue校园外卖订餐网系统设计与实现
  • Kubeflow 2025 全栈式机器学习平台部署指南(云原生+量子混合计算)
  • 【Python办公自动化】—Excel中相同编号自动添加-1-2-3...
  • Linux--git
  • python学习笔记-mysql数据库操作
  • C语言刷题第三章(上)
  • Windows 系统下安装 RabbitMQ 的详细指南
  • word甲烷一键下标——宏
  • Echarts 柱状或折线或其他多数据图表自动向右滚动
  • centos没有ll
  • 【vue+excel】导出excel(目前是可以导出两个sheet)
  • dify+mysql的诗词助手
  • Appium高级操作--从源码角度解析--模拟复杂手势操作
  • cursor使用
  • 【LeetCode110】平衡二叉树
  • AutoGen学习笔记系列(十七)Examples - Literature Review
  • 基于deepseek的图像生成系统
  • 【OpenFeign 面试专题】
  • Mysql小知识
  • 晶晨S905M/晶晨S905L2芯片-原机安卓4升级安卓7.1.2-通刷线刷固件包
  • 《九章云络书·织网布阵玄机》上篇
  • Spring Boot项目中集成sa-token实现认证授权和OAuth 2.0第三方登录
  • 解决Windows版Redis无法远程连接的问题
  • Linux Nginx安装部署、注册服务