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')
相关推荐
带多刺的玫瑰4 分钟前
Leecode刷题C语言之设计一个ATM机器
c语言·开发语言
“αβ”11 分钟前
c语言的文件操作与文件缓冲区
c语言·开发语言
吴冰_hogan29 分钟前
并发编程之CAS与Atomic原子操作详解
java·开发语言·数据库
常家壮37 分钟前
便捷的斤克转换小助手(Python 版)
开发语言·python·物理···单位转换
飞yu流星1 小时前
C++ 文件操作
开发语言·c++·cocoa
jjw_zyfx1 小时前
django vue3实现大文件分段续传(断点续传)
后端·python·django·vue
彭世瑜2 小时前
C语言:cJSON将struct结构体与JSON互相转换
c语言·开发语言·json
終不似少年遊*2 小时前
数据结构之线性表
数据结构·笔记·python·算法·线性表
SomeB1oody2 小时前
【Rust自学】10.6. 生命周期 Pt.2:生命周期的语法与例子
开发语言·后端·rust
数据小爬虫@2 小时前
利用Java爬虫获取店铺所有商品:技术实践与应用指南
java·开发语言·爬虫