2017-04-12 1 views
1

Ich bin auf der Suche nach einer pythonischen Art, die Schriftart eines ganzen Dokuments in Arial (10pt) zu ändern, da das aktuelle Dokument eine Mischung aus ein paar Schriftarten enthält.Gibt es eine Möglichkeit, eine Schriftart für Word-Dokumente mit python-docx zu ändern?

Ist das möglich?

- Vielen Dank im Voraus! JP

+0

Was meinst du mit Python? es scheint, dass mit der Verwendung der document.paragraphen können Sie alle Absätze erhalten und als Schleife über sie – Srgrn

+0

Ich bin auf der Suche nach einer höheren Ebene Lösung, die Tabellen und ihre Unterstrukturen (Zeilen, Zellen) berücksichtigt und auch zu dokumentieren .Absätze. –

Antwort

1

Es gibt ein paar verschiedene Möglichkeiten, dies zu erreichen, weil es ein komplexeres Problem ist als es zuerst erscheinen könnte.

Die "scheinbare" Schriftart oder vielleicht genauer die "effektive" Schriftart für ein Textelement in Word wird aus der Stilhierarchie berechnet, ähnlich wie CSS für HTML.

Die letzte Ebene in der Stilhierarchie, die alle höheren Ebenen außer Kraft setzt, wird direkt auf der Ausführungsebene angewendet. Also, wenn Sie einen bestimmten Lauf auf Arial 10pt eingestellt haben, wird es so erscheinen, egal was passiert.

Oberhalb dieser Ebene haben Sie Absatzstandardformatierung, Zeichenstil, Absatzstil, geerbten Stil (Grundstil des angewandten Stils) und Dokumentstandard, wahrscheinlich nicht in genau dieser Reihenfolge. Sie können also meinen Standpunkt zur Komplexität sehen. All diese Dinge müssten neu ausgerichtet werden, um es "richtig" zu machen (was definitiv für die spätere Bearbeitbarkeit von Vorteil ist).

Wenn Sie jedoch einen Brute-Force-Ansatz wünschen, wenden Sie einfach eine explizite Schriftart auf jeden Lauf im Dokument an. Vielleicht ein bisschen besser wäre eigentlich entfernen explizite Schriftart Einstellungen bei jedem Lauf, und lassen Sie den Stil oder Dokument Standardregel die effektive Schriftart.

die Läufe Iterieren sieht so etwas wie dieses Aircode:

document = Document('my-document.docx') 
for paragraph in document.paragraphs: 
    for run in paragraph.runs: 
     font = run.font 
     # ---do font-related things--- 

for table in document.tables: 
    for row in table.rows: 
     for cell in row.cells: 
      for paragraph in cell.paragraphs: 
       for run in paragraph.runs: 
        font = run.font 
        # ---do font-related things--- 

Wahrscheinlich, dass bisschen besser machen wollen, indem sie ein paar Funktionen zu extrahieren, aber das ist das Wesentliche.

Verwandte Themen