如何使用python-docx将行号添加到docx文档部分

时间:2016-07-15 15:44:39

标签: python xml docx python-docx

我正在使用python-docx生成一些文档。

我可以看到存在line numbering property可以应用于文档部分(至少对于 OOXML 标准)。

我还可以看到python-docx API中没有此属性。

我假设可以访问基础sectPr字段以添加lnNumType标记,但我无法(轻松)找到任何示例。

我的标准是否混淆了?或者我的问题有点模糊不清?

1 个答案:

答案 0 :(得分:2)

获得Section对象后,可以使用以下命令获取sectPr元素:

sectPr = section._sectPr

如果您在'python-docx变通办法函数OxmlElement'上谷歌,您将找到示例。所有元素都继承自lxml _Element,因此lxml操作有效。 BaseOxmlElement还添加了一些方便的其他方法。基本要点是:

sectPr = section._sectPr
lnNumType = OxmlElement('w:lnNumType')
lnNumType.set('fooAttrib', '42')
sectPr.append(lnNumType)

在许多情况下,您需要按照正确的顺序参加任何新的子元素,因为序列几乎总是处方。

您可以在此处找到对w:sectPr元素的一些方便分析: http://python-docx.readthedocs.io/en/latest/dev/analysis/features/sections.html

从快速浏览一下,你可以在最后添加一个w:lnNumType,因为它后面的元素不太常见。但是如果你想要更加严谨,你可以使用它而不是sectPr.append()

sectPr.insert_element_before(lnNumType, (
    'w:pgNumType', 'w:pgNumType', 'w:cols', 'w:formProt', 'w:vAlign',
    'w:noEndnote', 'w:titlePg', 'w:textDirection', 'w:bidi',
    'w:rtlGutter', 'w:docGrid', 'w:printerSettings', 'w:sectPrChange',
))

您可以在此处查看.insert_element_before()的实施情况: https://github.com/python-openxml/python-docx/blob/master/docx/oxml/xmlchemy.py#L718