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

文章讲述了在使用python-docx库创建Word文档时,如何解决p.add_paragraph设置序号段落时段前、段后间距失效的问题,通过禁用contextualSpacing并手动设置段落间距来确保格式正确。
Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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

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

代码实现

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')

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值