如何使用 python-docx 将行号添加到 docx 文档部分
How to add line numbers to a docx document section using python-docx
我正在使用 python-docx 生成一些文档。
我可以看到存在一个 line numbering property 可以应用于文档部分(至少对于 OOXML 标准)。
我还可以看到 属性 不存在于 python-docx API 中。
我假设可以访问基础 sectPr
字段以添加 lnNumType
标记,但我无法(轻松地)找到任何示例。
我是否混淆了自己的标准?还是我的问题有点晦涩?
获得 Section 对象后,您可以通过以下方式获取 sectPr 元素:
sectPr = section._sectPr
如果您 Google 在 'python-docx workaround function 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
我正在使用 python-docx 生成一些文档。
我可以看到存在一个 line numbering property 可以应用于文档部分(至少对于 OOXML 标准)。
我还可以看到 属性 不存在于 python-docx API 中。
我假设可以访问基础 sectPr
字段以添加 lnNumType
标记,但我无法(轻松地)找到任何示例。
我是否混淆了自己的标准?还是我的问题有点晦涩?
获得 Section 对象后,您可以通过以下方式获取 sectPr 元素:
sectPr = section._sectPr
如果您 Google 在 'python-docx workaround function 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