Python版本3.9、Python-docx版本1.1.0
故事是这样的,今天在用Python-docx生成文章的时候,发现标题的前段距和后段距不一样。强迫症我一下就上来了。
先尝试过和段落一样的方式设置,但是不生效,也不报错。
Head = doc.add_heading('',level=1) #新建标题
Head.space_before = Pt(10) #前段距,10磅
Head.space_after = Pt(10) #段后距,10磅
后来发现必须要通过,xml的方式更改,
一个简单的测试代码,调整后间距一致
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Inches, RGBColor, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import nsdecls
from docx.oxml import parse_xml
doc = Document()
Head = doc.add_heading('',level=1)
Head.alignment = WD_ALIGN_PARAGRAPH.CENTER #居中
#创建一个 XML 元素来表示段前距
spacing_xml = """ <w:spacing %s w:before="200" w:after="200"/> """ % nsdecls('w')
#解析这个 XML 元素,得到一个真实的、可操作的 XML 对象
spacing_element = parse_xml(spacing_xml)
#获取段落的 pPr 元素
paragraph_properties = Head._p.get_or_add_pPr()
#删除原有的 spacing 元素(如果有的话)
for existing_spacing in paragraph_properties.getchildren():
if existing_spacing.tag.endswith('spacing'):
paragraph_properties.remove(existing_spacing)
#添加新的 spacing 元素
paragraph_properties.append(spacing_element)
run = Head.add_run('测试')
run.font.name = u'微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
run.font.size = Pt(19) #字体大小
run.font.color.rgb = RGBColor(0, 0, 0) #颜色
run.bold = True #加粗
doc.save(r'测试.docx')
这下舒服了