2016-07-15 18 views
1

Ich verwende python-docx, um einige Dokumente zu generieren.Hinzufügen von Zeilennummern zu einem docx Dokumentabschnitt mit Python-docx

Ich kann sehen, dass es eine line numbering property existiert, die angewendet werden kann, Abschnitte zu dokumentieren (für die OOXML Standard zumindest).

Ich kann auch sehen, dass diese Eigenschaft nicht in der python-docx API vorhanden ist.

Ich gehe davon aus, dass es möglich ist, auf das zugrunde liegende Feld sectPr zuzugreifen, um das lnNumType-Tag hinzuzufügen, aber ich konnte (einfach) keine Beispiele finden.

Bekomme ich meine Standards verwirrt? Oder ist meine Frage nur ein wenig unklar?

+0

Implementierung von Section bei https://github.com/ python-openxml/python-docx/blob/master/docx/oxml/abschnitt.py; Siehe auch https://github.com/python-openxml/python-docx/blob/master/docx/oxml/xmlchemy.py. Ich sehe keinen Accessor in der Hand. – cxw

Antwort

1

Sobald Sie den Abschnitt Objekt haben, können Sie das sectPr Element erhalten mit:

sectPr = section._sectPr 

Wenn Sie Google auf 'python-docx Abhilfe Funktion OxmlElement' Sie Beispiele finden. Alle Elemente erben von lxml _Element, so dass die lxml-Manipulation funktioniert. Es gibt auch einige andere nützliche Methoden, die von BaseOxmlElement hinzugefügt wurden. Ein grundlegender Kern wäre:

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

In vielen Fällen müssen Sie immer alle neue untergeordneten Elemente in der richtigen Reihenfolge, wie die Sequenz fast immer vorgeschrieben ist zu besuchen.

Sie können einige praktische Analyse des w:sectPr Element finden Sie hier: http://python-docx.readthedocs.io/en/latest/dev/analysis/features/sections.html

Aus einem schnellen Blick sieht, dass Sie in der Lage sein werden, nur eine w:lnNumType am Ende anhängen wie die Elemente, die es folgen weniger sind verbreitet. Aber wenn man wollte strenger sein könnten Sie diese verwenden, anstatt 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', 
)) 

Sie die Implementierung für .insert_element_before() hier sehen können: https://github.com/python-openxml/python-docx/blob/master/docx/oxml/xmlchemy.py#L718