Commit 918aa82c authored by Jonas Schüppen's avatar Jonas Schüppen
Browse files

Some first adjustments

parent 293d52ec
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4,3 +4,4 @@
*/.python-version
.python-version
toMkdocs/__pycache__
.idea/
+28 −72
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ import shutil
from typing import Union
import argparse
import subprocess
#import win32com.client #pip install pywin32

from docx import Document  #pip install python-docx
from docx.oxml import OxmlElement
@@ -67,9 +66,7 @@ def clean_and_set_text(cell, new_text):
    # Füge neuen Absatz mit dem bereinigten Text hinzu
    cell.add_paragraph(new_text)

def postprocess_table_content(config):
    docx_path = config.get("output_docx")
    output_path = config.get("output_docx")
def postprocess_table_content(docx_path, output_path):
    doc = Document(docx_path)
    for table in doc.tables:
        for row in table.rows:
@@ -81,38 +78,13 @@ def postprocess_table_content(config):
                    rotate_cell_text(cell)
    doc.save(output_path)

def turn_table_contents_cli():
    parser = argparse.ArgumentParser(description="Searches for cells beginning with [rotate] and turns the content 90 degree counterclockwise")
    parser.add_argument("docx_input", help="Path to input DOCX file")
    parser.add_argument("docx_output", help="Path to output DOCX file")
    args = parser.parse_args()

def update_word_fields(config_path: Union[dict, str]):
    if os.path.isfile(config_path):
        docx_path = config_path
    else:
        docx_path = config_path.get("output_docx")
    # Prüfen, ob Datei existiert
    relativer_pfad = Path(docx_path)
    docx_absolute_path = relativer_pfad.resolve()
    if not os.path.isfile(docx_absolute_path):
        print(f'File not found: {docx_absolute_path}')

    # Word starten
    word = win32com.client.Dispatch("Word.Application")
    word.Visible = False  # unsichtbar im Hintergrund

    try:
        # Dokument öffnen
        doc = word.Documents.Open(str(docx_absolute_path))

        # Alle Felder im Dokument aktualisieren
        for field in doc.Fields:
            field.Update()

        # Dokument speichern
        doc.Save()

        # Schließen
        doc.Close()
        print(f'Fields in {docx_absolute_path} updated and saved')
    finally:
        word.Quit()
    postprocess_table_content(args.docx_input, args.docx_output)

def refresh_docx_fields(input_path: str, image: str = "docx-field-refresh") -> str:
    """
@@ -300,8 +272,10 @@ def update_toc(docx_input, docx_output):
    with zipfile.ZipFile(docx_input, 'r') as zin:
        xml_data = zin.read("word/document.xml")

    #update toc level
    xml_data = update_toc_level(xml_data)

    #update format of toc header
    xml_data = format_toc_header(xml_data)

    # create temp file
@@ -327,47 +301,29 @@ def update_toc(docx_input, docx_output):
        if os.path.exists(tmp_path):
            os.remove(tmp_path)

#def update_toc_level(config):
#    docx_path = config.get("output_docx")
#    word = win32com.client.Dispatch("Word.Application")
#    word.Visible = False
#
#    doc = word.Documents.Open(docx_path)
#
#    # Wenn kein TOC vorhanden ist, kannst du eins hinzufügen:
#    if doc.TablesOfContents.Count == 0:
#        # Inhaltsverzeichnis am Anfang des Dokuments einfügen
#        doc.TablesOfContents.Add(
#            Range=doc.Range(0, 0),
#            UseHeadingStyles=True,
#            UpperHeadingLevel=1,
#            LowerHeadingLevel=9,  # 👉 bis Heading 9
#            UseHyperlinks=True,
#            HidePageNumbersInWeb=False,
#            UseOutlineLevels=True
#        )
#    # Vorhandenes TOC anpassen
#    toc = doc.TablesOfContents(1)
#    #Formating heading -> ToDo: last line not working so skipped for the moment
#    #toc_range = toc.Range
#    #heading_para = toc_range.Paragraphs(1)
#    #heading_para.Style = doc.Styles("Heading 1")
#    #set level range from 1-9
#    toc.UpperHeadingLevel = 1
#    toc.LowerHeadingLevel = 9
#    toc.Update()

#    doc.SaveAs(docx_path)
#    doc.Close()
#    word.Quit()

def update_toc_cli():
    docx_input, docx_output = parse_input()

    update_toc(docx_input, docx_output)

def parse_input():
    parser = argparse.ArgumentParser(description="Update a DOCX table of contents.")
    parser.add_argument("docx_input", help="Path to input DOCX file")
    parser.add_argument("docx_output", help="Path to output DOCX file")
    parser.add_argument('docx_input', '-i', '--input',
                        metavar='INPUT_FILE',
                        required=True,
                        type=str,
                        default=None,
                        help='Path to input DOCX file')

    parser.add_argument('docx_output', '-o', '--output',
                        metavar='OUTPUT_FILE',
                        required=False,
                        type=str,
                        default=None,
                        help='Path to output DOCX file')
    args = parser.parse_args()

    update_toc(args.docx_input, args.docx_output)
    return args.docx_input, args.docx_output


def table_widths_adjustment(config):
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ setup(
								'svg2png=svg2png:main',
								"update_references=postprocessing:update_word_fields",
        						"update_formats=postprocessing:apply_standard_style_to_unformatted_paragraphs",
        						"turn_table_contents=postprocessing:postprocess_table_content",
        						"turn_table_contents=postprocessing:turn_table_contents_cli",
        						"table_width_adjustment=postprocessing:table_widths_adjustment",
        						"check_multipage_tables=postprocessing:insert_page_break_before_long_tables",
        						#"apply_etsi_styling: postprocessing:postprocess_etsi_styles",