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')
相关推荐
唐人街都是苦瓜脸10 分钟前
Java中常见的设计模式
java·开发语言·设计模式
大锦终11 分钟前
【C++】模板进阶
c语言·开发语言·数据结构·c++
你是理想11 分钟前
java基础多态------面试八股文
java·开发语言·面试
我感觉。12 分钟前
Anaconda环境管理及 pycharm、jupyter notebook 的配置
开发语言·pytorch·python·深度学习
Code_流苏12 分钟前
《Python星球日记》第22天:NumPy 基础
python·numpy·多维数组·python数据分析·向量化计算
向宇it13 分钟前
【unity游戏开发入门到精通——动画篇】Animator反向动力学(IK)
开发语言·unity·c#·编辑器·游戏引擎
returnShitBoy15 分钟前
Swift 的主要特点和优点或缺点是什么?
开发语言·ios·swift
jianshuilan_061323 分钟前
数组 array
java·开发语言
程序员一诺24 分钟前
【Flask开发】嘿马文学web完整flask项目第4篇:4.分类,4.分类【附代码文档】
后端·python·flask·框架
东方醴歌33 分钟前
本地搭建直播录屏应用并实现使用浏览器远程控制直播间录屏详细教程
开发语言·后端·golang