python + word文本框中文字识别并替换【真替换,不只是识别】

1. 简单描述

在一些转换场景下,文本框不会被转换,需要先识别成文字内容。
【识别的文字段落可能会和实际看到的效果有些差异,后续还需校对,如下图】。
在这里插入图片描述
不足:除了上面说的那个情况(上图说的问题,有大神解决了可发评论区,不胜感激。),还有就是如果文本框要是还有一些特殊字体样式,或者图片什么的未作处理,读者可自行优化。

2.废话少说,直接上干货

def docx_handle_textbox(word_path, new_word_path=''):doc = docx.Document(word_path)textbox_flag = False  # 默认不存在for para in doc.paragraphs:text_box_list = []if para._element.xml.find('textbox') != -1:  # 表示文本框textbox_flag = True# print(para._element.xml)# print('该文档存在文本框,需核实替换内容是否正确(主要是文本的顺序)')# print( para._element.xml) # /v:group/v:group/v:rect/v:textbox# for textbox in para._element.xpath('.//w:r/w:pict/v:group/v:group/v:rect/v:textbox/w:txbxContent/w:p'): # 类型需要相同w, 否则需要指定 namespace# ============================================不保留文本框文字样式==================================================# for p in para._element.xpath('.//w:p'):#     tmp_run_list = []#     for run in p.xpath('.//w:t'):#         tmp_run_list.append(run.text)#     if len(tmp_run_list) > 0:#         text_box_list.append(''.join(tmp_run_list))## para._element.clear()  # 清除原来的文本框## # 【方法一】将一个大文本框作为一整段,不推荐# # text_box_content = '\n'.join(text_box_list)# # print(text_box_content)# # para.text = text_box_content## # 【方法二】推荐做法根据文本框里的段进行分段# for tbc in text_box_list:#     para.insert_paragraph_before(tbc)  # 文本框所在段前插入段落【由于文本框被清除,即在完成了原文本框内容的替换】# ==============================================================================================================# 保留一些简单样式for p in para._element.xpath('.//w:p'):tmp_run_list = []for run in p.xpath('.//w:r'):  # 一个run的内容tmp_run_list.append(run)if len(tmp_run_list) > 0:text_box_list.append(tmp_run_list)para._element.clear()  # 清除原来的文本框# 【方法一】将一个大文本框作为一整段,不推荐# text_box_content = '\n'.join(text_box_list)# print(text_box_content)# para.text = text_box_content# 【方法二】推荐做法根据文本框里的段进行分段for tbc in text_box_list:  # tbc可以认为是一个段落# 文本框所在段前插入段落【由于文本框被清除,即在完成了原文本框内容的替换】insert_para = para.insert_paragraph_before('')  # 插入空字符段落,表示创建一个空段落for run_ct in tbc:# 1.添加runrun = insert_para.add_run(run_ct.text)# 2.对run进行样式添加# 2.1检查斜体样式if run_ct.xml.find('<w:i/>') != -1:# print(f"文本 '{run_ct.text}' 是斜体。")run.font.italic = True# 2.2检查是否加粗if run_ct.xml.find('<w:b/>') != -1:# print(f"文本 '{run_ct.text}' 是加粗。")run.font.bold = True# 2.3检查文本颜色(如果已设置)colors = re.findall('<w:color w:val="(.*?)"/>', run_ct.xml)if colors:  # 非空run.font.color.rgb = RGBColor.from_string(colors[0])# 2.4一些特殊样式处理;Todo 需要根据word中具体内容去调整if run_ct.style == '0Char':  # 非None word中的双下划线,此处只能使用单下划线操作【要先原样式比较麻烦】run.underline = Trueif textbox_flag:  # True则进行文本框的替换if new_word_path == '':  # 新路径为空,则覆盖原文件new_word_path = word_pathdoc.save(new_word_path)return textbox_flag

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/700561.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf怎么标注红色方框?五种PDF标注红色方框方法

pdf怎么标注红色方框&#xff1f;在当今数字化时代&#xff0c;PDF文档已成为我们日常工作和学习中不可或缺的一部分。然而&#xff0c;如何在海量的PDF文件中快速、准确地标注出重要信息&#xff0c;让内容更加醒目呢&#xff1f;今天&#xff0c;我将向大家介绍五种PDF标注红…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天&#xff0c;随着上云业务的用户数量越来越多、数据中心的规模…

黑马基于Web-socket的java聊天室基本解析

要是用Web-socket协议&#xff0c;我们要前端upgrade升级成web-socket协议 首先我们要引入springboot的websocket起步依赖&#xff0c;这样子方便使用&#xff0c;自己指定版本注意 <dependency><groupId>org.springframework.boot</groupId><artifactId&…

IT技术产品:开发者极为重要的思维习惯

1、特色内容预告 1、我用敏捷开发思维&#xff0c;提高工作效率。 2、我用代码批判思维&#xff0c;逐渐让自己的作品变得无可挑剔。 3、我是一个顶级程序员&#xff0c;是哪些重要的专业习惯&#xff0c;让我如此优秀&#xff1f; 2、可以免费获取到的IT资源 1、《软件工程&a…

在阿里云服务器上安装MySQL

目录 一、先卸载不需要的环境 1.关闭MySQL服务 2.查看安装包以及卸载安装包 3.依次卸载所有包 4. 获取mysql官⽅yum源 二、安装&#xff08;密钥过期解决方法&#xff09; 三、启动并进入 关于MySQL MySQL是一个广泛使用的开源关系型数据库管理系统&#xff08;RDBMS&…

麒麟 V10 安装docker2

1. 查看系统版本 2.安装docker-ce 添加源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker yum install docker-ce --allowerasing 重启docker systemctl start docker 3.安装nvidia-container-runtime 添…

el-table组件选中后使用toggleRowSelection无法取消已选中的数据——bug记录-骚操作解决

先说本文重点解决的问题&#xff1a; 存在的问题&#xff1a;当右侧已选中的数据中&#xff0c;删除了左侧其他页面的数据&#xff0c;但是左侧数据切换到其他页面后&#xff0c;左侧还保留选中的状态。 最近在写后台管理系统的时候&#xff0c;遇到一个需求&#xff1a; 左…

2.1.2 事件驱动reactor的原理与实现

LINUX 精通 2 day14 20240513 day15 20240514 算法刷题&#xff1a;2维前缀和&#xff0c;一二维差分 耗时 135min 习题课 4h 课程补20240425 耗时&#xff1a;4h 课程链接地址 回顾 怎么学0voice课网络io——一请求一线程&#xff0c;一个client一个连接再accpet分配io f…

Git 基础使用(1) 入门指令

文章目录 Git 作用Git 安装Git 使用Git 仓库配置Git 工作原理Git 修改添加Git 查看日志Git 修改查询Git 版本回退 概念补充 Git 作用 Git 是一种分布式版本控制系统&#xff0c;它旨在追踪文件和文件夹的更改&#xff0c;并协助多人协作开发项目。 Git 安装 &#xff08;Lin…

Pyqt中QThread传递自己定义的参数、类、函数

Pyqt中QThread传递自己定义的参数、类、函数 1 pyqt中Qthread传递自己定义的参数2 pyqt中Qthread传递自己定义的类3 pyqt中Qthread传递自己定义的函数4 pyqt中Qthread内部定义自己的函数5 pyqt中Qthread传递参数到内部定义自己的函数 1 pyqt中Qthread传递自己定义的参数 在PyQ…

bugfix:遇见“隐形字符”:ⅰ与i的编码迷局

前言 在软件开发的世界里&#xff0c;遇到各种奇奇怪怪的bug是在所难免的。今天&#xff0c;我就遭遇了一个看似简单实则棘手的问题——用户反馈账号无法登录&#xff0c;系统一直提示“账号不存在”。一番抽丝剥茧后&#xff0c;我发现问题竟然出在一个不起眼的字符上&#x…

589.N叉树的前序遍历

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…