Python-docx 深入word源码 带有序号的段落无法设置段后、段前距离、间距等段落属性

如果使用p = doc.add_paragraph('内容', style='List Number')来创建序号段落,会发现设置序号段落之间的段前、段后以及段落间距无法生效。后来将docx库生成的word文档打开后发现段落的设置出现问题,如下图红框所示,将该选项去掉即可使段落间距属性生效

所以经过查看XML,在word/document.xml中的对应标签设置为<w:contextualSpacing w:val="0"/>

代码实现

python 复制代码
def SetContextualSpacing(p):
    '''
    设置段落上下文设置不相关,以使段后、段前距离等设置生效
    '''
    pPr = p._element.find(qn('w:pPr'))
    if pPr is None:
        pPr = OxmlElement('w:pPr')

    contextual_setting = OxmlElement('w:contextualSpacing')
    contextual_setting.set(qn('w:val'), '0')

    pPr.append(contextual_setting)


# 通过调整pt来设置段落的段前距离
def SetParagraphSpaceBeforeByPt(paragraph, pt) -> None:
    paragraph.paragraph_format.space_before = Pt(pt)


doc = Document()

p = doc.add_paragraph('123', style='List Number')
p = doc.add_paragraph('12345', style='List Number')
SetContextualSpacing(p=p)
SetParagraphSpaceBeforeByPt(paragraph=p, pt=35)

# 保存文档
doc.save('./test-table-updated.docx')
相关推荐
南境十里·墨染春水几秒前
C++笔记 forward完美转发
开发语言·c++·笔记
代码羊羊几秒前
Rust 格式化输出完全攻略:从入门到精通
开发语言·后端·rust
不会编程的懒洋洋1 分钟前
WPF XAML+布局+控件
xml·开发语言·c#·视觉检测·wpf·机器视觉·视图
Rust研习社5 分钟前
Rust + PostgreSQL 极简技术栈应用开发
开发语言·数据库·后端·http·postgresql·rust
gc_22995 分钟前
学习C#调用OpenXml操作word文档的基本用法(28:学习文本类)
word·文本·text·openxml
雾岛听风6917 分钟前
JavaScript基础语法速查手册
开发语言·前端·javascript
c++之路8 分钟前
C++ STL
java·开发语言·c++
geovindu10 分钟前
go:Template Method Pattern
开发语言·后端·设计模式·golang·模板方法模式
卷Java17 分钟前
上下文压缩
开发语言·windows·python
AI技术增长17 分钟前
Pytorch图像去噪实战(十二):DDPM图像去噪完整训练流程,构建可复现扩散模型工程
pytorch·python·深度学习