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

Python-docx 深入word源码 自定义字符间距

代码和实现效果

from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Pt# 调整pt设置字间距
def SetParagraphCharSpaceByPt(run, pt=1):'''通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距'''# 获取或创建<w:rPr>元素rPr = run._element.find(qn('w:rPr'))if rPr is None:rPr = OxmlElement('w:rPr')run._element.insert(0, rPr)# 创建<w:spacing>元素spaceChar = OxmlElement('w:spacing')spaceChar.set(qn('w:val'), str(pt * 20))# 添加<w:spacing>到<w:rPr>rPr.append(spaceChar)def AddParagraph(doc, text):p = doc.add_paragraph()run = p.add_run(text)return p, rundoc = Document()
p, run = AddParagraph(doc, text='这是一个段落')
SetParagraphCharSpaceByPt(run=run, pt=3)
doc.save('test.docx')

在这里插入图片描述

原理和代码思路

通过解压的方式打开一个已经提前设置好字符间距的word文档,在word/document.xml可以看到具体关于字符间距设置的XML标签代码

<w:p><w:r><w:rPr><w:rFonts w:ascii="黑体" w:hAnsi="黑体" w:eastAsia="黑体"/><w:b w:val="0"/><w:i w:val="0"/><w:sz w:val="32"/><w:spacing w:val="150.0"/></w:rPr><w:t>这是一个段落</w:t></w:r>
</w:p>
  1. <w:p>表示word:paragraph
  2. <w:r>表示word:run
  3. <w:t>表示word:text,定义段落的文本内容;
  4. <w:rPr>表示word:runProperty,而在<w:rPr>标签下的是各类属性标签,其中<w:spacing>为字符间距,这是需要coding为我们自定义的标签。而上述示例Python代码也在对这个标签进行创建并赋值;
  5. <w:spacing>标签中的属性w:val代表字符间距大小,其值等于pt(磅) * 20

相关文章:

  • 【JavaWeb笔记】单选框,结合Servlet
  • CGAN笔记总结第二弹~
  • AntDB数据库参加ACDU中国行杭州站,分享数据库运维实践与经验
  • golang实现同步阻塞、同步非阻塞、异步非阻塞IO模型
  • Python面向对象三大特征(python系列20)
  • 数据结构和算法 - 数组
  • C++11(下)
  • Vue引入字节跳动图标库
  • 基于Spring+Spring boot的SpringBoot在线电子商城管理系统
  • DevOps搭建(五)-JDK安装详细步骤
  • Linux C/C++并发编程实战(8)CAS机制的ABA问题
  • 云计算与大数据技术应用知识及案列
  • 数据结构:图的存储和遍历
  • 机器人与3D视觉 Robotics Toolbox Python 二 空间位姿描述
  • 【力扣】刷题备忘录-动归-343. 整数拆分
  • 【node学习】协程
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Flannel解读
  • github指令
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • MaxCompute访问TableStore(OTS) 数据
  • SQLServer之索引简介
  • windows-nginx-https-本地配置
  • windows下mongoDB的环境配置
  • 成为一名优秀的Developer的书单
  • 关于Flux,Vuex,Redux的思考
  • 跨域
  • 前端js -- this指向总结。
  • 设计模式(12)迭代器模式(讲解+应用)
  • 中文输入法与React文本输入框的问题与解决方案
  • 06-01 点餐小程序前台界面搭建
  • 【云吞铺子】性能抖动剖析(二)
  • AI算硅基生命吗,为什么?
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Forward) Music Player: From UI Proposal to Code
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (篇九)MySQL常用内置函数
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)Sublime Text3配置Lua运行环境
  • (转)德国人的记事本
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET BackgroundWorker
  • .NET MVC之AOP
  • .net和php怎么连接,php和apache之间如何连接
  • .Net中的集合
  • [383] 赎金信 js
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [bzoj1324]Exca王者之剑_最小割
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [EFI]英特尔 冥王峡谷 NUC8i7HVK 电脑 Hackintosh 黑苹果efi引导文件
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误