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')
相关推荐
测试员周周3 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
测试19983 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
曲幽5 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
杜子不疼.5 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号35 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia6 小时前
Qt——编辑交互功能的实现
开发语言·qt
石山代码6 小时前
C++ 内存分区 堆区
java·开发语言·c++
前端若水6 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
无风听海7 小时前
C# 隐式转换深度解析
java·开发语言·c#
涛声依旧-底层原理研究所7 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer