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')
相关推荐
weixin_4407305021 分钟前
java结构语句学习
java·开发语言·学习
JIngJaneIL27 分钟前
基于java+ vue医院管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
量子联盟29 分钟前
功能完整的PHP站点导航管理系统php程序;开源免费下载
开发语言·php
仙俊红31 分钟前
在 Java 中,`==` 和 `equals()` 的区别
java·开发语言·jvm
SiYuanFeng40 分钟前
【Word 排版】文本框/文字行间距异常偏大的解决方案
word
信创天地1 小时前
信创国产化数据库的厂商有哪些?分别用在哪个领域?
数据库·python·网络安全·系统架构·系统安全·运维开发
JIngJaneIL1 小时前
基于java + vue校园跑腿便利平台系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
不哦罗密经1 小时前
python相关
服务器·前端·python
happybasic1 小时前
python字典中字段重复性的分析~~
开发语言·python
山海青风1 小时前
人工智能基础与应用 - 数据处理、建模与预测流程 6 模型训练
人工智能·python·机器学习