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.mzph.cn/diannao/10152.shtml

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

相关文章

【桌面应用开发】Rust+Tauri框架项目打包操作

1.项目npm install下载项目依赖&#xff08;需要配置好node.js环境&#xff09; 可参考&#xff1a;https://blog.csdn.net/m0_64346565/article/details/138319651 2.自定义图标&#xff08;项目初始化开始第一次需要配置生成&#xff0c;后面可跳过这一步骤&#xff09; Ta…

ESP32引脚入门指南(七):从理论到实践(IIC)

引言 IIC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;又称为IC&#xff0c;是一种简单而高效的多主控器串行通信协议&#xff0c;常用于微控制器和各种外围设备之间的通信。在ESP32系列芯片中&#xff0c;IIC协议被广泛应用于连接各种传感器、存储器和其他支…

机器学习-Numpy

机器学习-Numpy 如果一个人拒绝提高自己的思想觉悟&#xff0c;那么他只能处在弱小、可怜、凄惨的境地。 目录 机器学习-Numpy 1.Numpy&#xff1a;生成矩阵 做矩阵运算 1&#xff09;创建矩阵 ①使用列表创建 ②使用元组创建 2&#xff09;矩阵取值 3&#xff09;numpy…

GitHub搭建免费博客

一、GitHub仓库准备 ​ 搭建博客需要准备两个仓库。一个存放博客图床的仓库&#xff0c;另一个存放博客网站的仓库。 1.1、图床创建 新建仓库 第一步&#xff1a; ​ 第二步&#xff1a; 生成Token令牌 点击右上角头像->Settings->下拉&#xff0c;直到左侧到底&#…

ESP32 + ST7789 LCD

1、准备 ESP32 单片机开发板 ST7789 LCD 模块&#xff08;240 * 320 像素&#xff09; 杜邦线 2、接线 LCD功能ESP32VCC 供电电压正极 3.3V 、 5V GND 供电电压负极 GNDIDN / MOSI SPI 接口数据 引脚 23CLK 串行接口时钟信号 18CS 芯片选择引脚&#xff1b;低电平有效 5DC 显…

Mac安装Photoshop2024 For Macv25.7.0 ps2024中文激活版

资源介绍 支持&#xff1a;mac系统/M/INTEL芯 Adobe Photoshop for mac是由Adobe专业为mac系统开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地进行图片编辑和创造工作。PS有很多功能&#xff0c;在图…

安卓串口通訊三

核心代碼如下&#xff1a; package com.example.comandroid;import static android.content.ContentValues.TAG;import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import…

如何在MAXScript中随机选择集合的百分比?

有时&#xff0c;你希望随机选择对象的子集来应用材质或效果。手动操作随机选择是一件麻烦的事&#xff0c;而且随机的效果也不理想&#xff0c;最好的方法是编写一个脚本来执行。以下是MAXScript随机选择函数的示例。 function getRandomFromCollection collection percentag…

以太网技术介绍

随着通信和计算机技术的不断发展&#xff0c;无论是骨干网还是接入网&#xff0c;以太网都已成为应用场景最多&#xff0c;应用范围最广泛的技术之一。对于初次应用以太网的读者&#xff0c;本文主要给出以太网技术的基础知识&#xff0c;并对以太网涉及的部分协议进行简要说明…

收音机套件焊接和装调的总结

很早之前买了一个小收音机&#xff0c;今天翻出来焊接上。 还好&#xff0c;质量挺好的&#xff0c;电路板没有氧化。 一。静态电流 pcb上面留有ABCD四个测电流的位置。方便调试。 焊接后&#xff0c;V1电流偏大&#xff0c;如果电流过大&#xff0c;会导致R2的压降过大&am…

datepicker 时间快捷键、禁用日期

一、封装方法 /*** 默认开始和结束时间* type {string[]}*/ import dayjs from dayjs export const defaultTime [00:00:00, 23:59:59] /*** 设置日期组件 快捷方式* type {({onClick(*): void, text: string}|{onClick(*): void, text: string}|{onClick(*): void, text: s…

JavaWeb后端基础知识(1)包括(SpringBoot,HTTP,Web 服务器,请求,响应,分层解耦)

JavaWeb后端基础知识&#xff08;1&#xff09; 包括&#xff08;SpringBoot&#xff0c;HTTP&#xff0c;Web 服务器&#xff0c;请求&#xff0c;响应&#xff0c;分层解耦&#xff09; 目录 JavaWeb后端基础知识&#xff08;1&#xff09; 一.SpringBoot 1.SpringBogtWe…

verilog基础语法之表达式

verilog基础语法之表达式 1、操作数2、操作符3、示例 在Verilog中&#xff0c;表达式是由操作数和操作符组成的组合&#xff0c;包括&#xff1a;算术操作符、关系操作符、等价操作符、逻辑操作符、按位操作符、归约操作符、移位操作符、拼接操作符和条件操作符&#xff0c;它们…

学习java第六十六天

Spring 中的 bean 的作用域有哪些? singleton : 唯一 bean 实例&#xff0c;Spring 中的 bean 默认都是单例的。 prototype : 每次请求都会创建一个新的 bean 实例。 request : 每一次HTTP请求都会产生一个新的bean&#xff0c;该bean仅在当前HTTP request内有效。 sessio…

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型 GT2505HS-VTBD参数,GT2505HS-VTBD用户手册,GT2505HS-VTBD使用手册GT2505HS-VTBD参数说明&#xff1a;手持式5.7吋型&#xff0c;VGA 640*480&#xff0c;TFT彩色液晶屏,65536色,内存32MB&#xff0c;DC24V,内置以太网接口。 GT2505HS-VT…

agiletc部署

数据库创建及运行 启动命令 cd /AgileTC/case-server&& nohup mvn spring-boot:run &查看是否启动成功 http://192.168.101.:8094/case/caseList/1需要安装java javac等 一、安装java 1 安装java11 sudo yum install java-11-openjdk-devel -y2 切换到java11 …

【零基础】system generator①设置卡解析

1.在matlab中我们输入的是双精度浮点型数据&#xff0c;经过gateway后变成定点型。十六位十四个小数位&#xff0c;整个数据有十六位&#xff0c;其中十四位给了小数 2.fixed-point定点型&#xff1b;signed有符号&#xff1b;2’s comp补码 3.量化误差 truncate&#xff0c;舍…

同时安装多个nodejs版本可切换使用,或者用nvm管理、切换nodejs版本(两个详细方法)

目录 一.使用nvm的方法&#xff1a; 1.卸载nodejs 2.前往官网下载nvm 3.安装nvm 4.查看安装是否完成 5.配置路径和淘宝镜像 6.查看和安装各个版本的nodejs 7.nvm的常用命令 二.不使用nvm&#xff0c;安装多个版本&#xff1a; 1.安装不同版本的nodejs 2.解压到你想放…

Ubuntu 22.04 下,VS Code 配置 C++ 编译及 CMake

一、VS Code 安装以及 C 编译环境配置 1. 在 Ubuntu 中安装 VS Code 笔者直接在 Ubuntu Software 中心安装 VS Code。也可以从VS Code官网下载 deb&#xff0c;解压 dpkg -i 安装。 2. VS Code 中配置 g/gcc 1) 安装 C/C 扩展 &#xff08;CtrlShiftX&#xff09; 2&#x…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1&#xff1a;P值的初值为Q。见链接中的&#xff1a; 注意2&#xff1a;Q, R参数调节 注意3&#xff1a;LQR一般只做横向控制&#xff0c;不做纵向控制。LQR输出的速度…