DOCX-Erstellung, -Bearbeitung und -Analyse
Übersicht
Ein Benutzer kann Sie bitten, den Inhalt einer .docx-Datei zu erstellen, zu bearbeiten oder zu analysieren. Eine .docx-Datei ist im Wesentlichen ein ZIP-Archiv mit XML-Dateien und anderen Ressourcen, die Sie lesen oder bearbeiten können. Für unterschiedliche Aufgaben stehen verschiedene Tools und Arbeitsabläufe zur Verfügung.
Entscheidungsbaum für Arbeitsabläufe
Lesen/Analysieren von Inhalten
Verwenden Sie die Abschnitte „Textextraktion“ oder „Direkter XML-Zugriff“ unten.
Neues Dokument erstellen
Verwenden Sie den Arbeitsablauf „Erstellen eines neuen Word-Dokuments“.
Vorhandenes Dokument bearbeiten
-
Ihr eigenes Dokument + einfache Änderungen Verwenden Sie den Arbeitsablauf „Einfache OOXML-Bearbeitung“.
-
Das Dokument einer anderen Person Verwenden Sie den „Redlining-Workflow“ (empfohlene Standardeinstellung).
-
Rechtliche, akademische, geschäftliche oder behördliche Dokumente Verwenden Sie den „Redlining-Workflow“ (erforderlich).
Lesen und Analysieren von Inhalten
Textextraktion
Wenn Sie nur den Textinhalt eines Dokuments lesen müssen, konvertieren Sie das Dokument mit Pandoc in Markdown. Pandoc bietet hervorragende Unterstützung für die Beibehaltung der Dokumentstruktur und kann nachverfolgte Änderungen anzeigen:
# Dokument mit nachverfolgten Änderungen in Markdown konvertieren
pandoc --track-changes=all path-to-file.docx -o output.md
# Optionen: --track-changes=accept/reject/all
Direkter XML-Zugriff
Sie benötigen direkten XML-Zugriff für: Kommentare, komplexe Formatierung, Dokumentstruktur, eingebettete Medien und Metadaten. Für diese Funktionen müssen Sie ein Dokument entpacken und die rohen XML-Inhalte lesen.
Entpacken einer Datei
python ooxml/scripts/unpack.py <office_file> <output_directory>
Wichtige Dateistrukturen
word/document.xml– Hauptinhalt des Dokumentsword/comments.xml– Kommentare, auf die in document.xml verwiesen wirdword/media/– Eingebettete Bilder und Mediendateien- Nachverfolgte Änderungen verwenden
<w:ins>(Einfügungen) und<w:del>(Löschungen) Tags
Erstellen eines neuen Word-Dokuments
Verwenden Sie beim Erstellen eines neuen Word-Dokuments von Grund auf docx-js, mit dem Sie Word-Dokumente mit JavaScript/TypeScript erstellen können.
Arbeitsablauf
- PFLICHT – GANZE DATEI LESEN: Lesen Sie
docx-js.md(~500 Zeilen) vollständig von Anfang bis Ende. Setzen Sie beim Lesen dieser Datei NIEMALS Bereichsbeschränkungen. Lesen Sie den gesamten Dateiinhalt für detaillierte Syntax, kritische Formatierungsregeln und bewährte Methoden, bevor Sie mit der Dokumenterstellung fortfahren. - Erstellen Sie eine JavaScript/TypeScript-Datei mit den Komponenten Document, Paragraph, TextRun (Sie können davon ausgehen, dass alle Abhängigkeiten installiert sind; falls nicht, lesen Sie den Abschnitt „Abhängigkeiten“ unten).
- Exportieren Sie als .docx mit Packer.toBuffer().
Bearbeiten eines vorhandenen Word-Dokuments
Verwenden Sie beim Bearbeiten eines vorhandenen Word-Dokuments die Document Library (eine Python-Bibliothek für die OOXML-Manipulation). Die Bibliothek kümmert sich automatisch um die Infrastruktureinrichtung und bietet Methoden zur Dokumentenmanipulation. Für komplexe Szenarien können Sie über die Bibliothek direkt auf das zugrunde liegende DOM zugreifen.
Arbeitsablauf
- PFLICHT – GANZE DATEI LESEN: Lesen Sie
ooxml.md(~600 Zeilen) vollständig von Anfang bis Ende. Setzen Sie beim Lesen dieser Datei NIEMALS Bereichsbeschränkungen. Lesen Sie den gesamten Dateiinhalt für die API der Document Library und XML-Muster zum direkten Bearbeiten von Dokumentdateien. - Entpacken Sie das Dokument:
python ooxml/scripts/unpack.py <office_file> <output_directory> - Erstellen und führen Sie ein Python-Skript mit der Document Library aus (siehe Abschnitt „Document Library“ in ooxml.md).
- Packen Sie das endgültige Dokument:
python ooxml/scripts/pack.py <input_directory> <office_file>
Die Document Library bietet sowohl High-Level-Methoden für allgemeine Operationen als auch direkten DOM-Zugriff für komplexe Szenarien.
Redlining-Workflow für die Dokumentenprüfung
Dieser Arbeitsablauf ermöglicht es Ihnen, umfassende nachverfolgte Änderungen mit Markdown zu planen, bevor Sie sie in OOXML implementieren. KRITISCH: Für vollständige nachverfolgte Änderungen müssen Sie ALLE Änderungen systematisch implementieren.
Batching-Strategie: Gruppieren Sie zusammengehörige Änderungen in Batches von 3–10 Änderungen. Dies macht das Debuggen überschaubar, während die Effizienz erhalten bleibt. Testen Sie jeden Batch, bevor Sie zum nächsten übergehen.
Prinzip: Minimale, präzise Bearbeitungen
Wenn Sie nachverfolgte Änderungen implementieren, markieren Sie nur den Text, der sich tatsächlich ändert. Das Wiederholen von unverändertem Text erschwert die Überprüfung von Bearbeitungen und wirkt unprofessionell. Teilen Sie Ersetzungen auf in: [unveränderter Text] + [Löschung] + [Einfügung] + [unveränderter Text]. Bewahren Sie die RSID des ursprünglichen Laufs für unveränderten Text, indem Sie das <w:r>-Element aus dem Original extrahieren und wiederverwenden.
Beispiel – Änderung von „30 Tage“ in „60 Tage“ in einem Satz:
# SCHLECHT – Ersetzt den gesamten Satz
'<w:del><w:r><w:delText>Die Frist beträgt 30 Tage.</w:delText></w:r></w:del><w:ins><w:r><w:t>Die Frist beträgt 60 Tage.</w:t></w:r></w:ins>'
# GUT – Markiert nur das Geänderte, behält das ursprüngliche <w:r> für unveränderten Text bei
'<w:r w:rsidR="00AB12CD"><w:t>Die Frist beträgt </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> Tage.</w:t></w:r>'
Arbeitsablauf für nachverfolgte Änderungen
-
Markdown-Darstellung abrufen: Konvertieren Sie das Dokument in Markdown mit beibehaltenen nachverfolgten Änderungen:
pandoc --track-changes=all path-to-file.docx -o current.md -
Änderungen identifizieren und gruppieren: Überprüfen Sie das Dokument und identifizieren Sie ALLE erforderlichen Änderungen, organisieren Sie sie in logischen Batches:
Ortungsmethoden (zum Auffinden von Änderungen in XML):
- Abschnitts-/Überschriftsnummern (z. B. „Abschnitt 3.2“, „Artikel IV“)
- Absatzkennungen, falls nummeriert
- Grep-Muster mit eindeutigem umgebenden Text
- Dokumentstruktur (z. B. „erster Absatz“, „Signaturblock“)
- Keine Markdown-Zeilennummern verwenden – diese bilden keine XML-Struktur ab
Batch-Organisation (gruppieren Sie 3–10 zusammenhängende Änderungen pro Batch):
- Nach Abschnitt: „Batch 1: Abschnitt-2-Änderungen“, „Batch 2: Abschnitt-5-Aktualisierungen“
- Nach Typ: „Batch 1: Datumskorrekturen“, „Batch 2: Parteinamenänderungen“
- Nach Komplexität: Beginnen Sie mit einfachen Textersetzungen, dann komplexe strukturelle Änderungen
- Sequenziell: „Batch 1: Seiten 1-3“, „Batch 2: Seiten 4-6“
-
Dokumentation lesen und entpacken:
- PFLICHT – GANZE DATEI LESEN: Lesen Sie
ooxml.md(~600 Zeilen) vollständig von Anfang bis Ende. Setzen Sie beim Lesen dieser Datei NIEMALS Bereichsbeschränkungen. Achten Sie besonders auf die Abschnitte „Document Library“ und „Muster für nachverfolgte Änderungen“. - Entpacken Sie das Dokument:
python ooxml/scripts/unpack.py <file.docx> <dir> - Notieren Sie die vorgeschlagene RSID: Das Entpackskript schlägt eine RSID für Ihre nachverfolgten Änderungen vor. Kopieren Sie diese RSID zur Verwendung in Schritt 4b.
- PFLICHT – GANZE DATEI LESEN: Lesen Sie
-
Änderungen in Batches implementieren: Gruppieren Sie Änderungen logisch (nach Abschnitt, Typ oder Nähe) und implementieren Sie sie gemeinsam in einem einzigen Skript. Dieser Ansatz:
- Macht das Debuggen einfacher (kleinerer Batch = einfachere Fehlerisolierung)
- Ermöglicht inkrementellen Fortschritt
- Behält die Effizienz (Batchgröße von 3–10 Änderungen funktioniert gut)
Vorgeschlagene Batch-Gruppierungen:
- Nach Dokumentabschnitt (z. B. „Änderungen Abschnitt 3“, „Definitionen“, „Kündigungsklausel“)
- Nach Änderungstyp (z. B. „Datumsänderungen“, „Parteinamenaktualisierungen“, „Ersetzung rechtlicher Begriffe“)
- Nach Nähe (z. B. „Änderungen auf Seiten 1-3“, „Änderungen in der ersten Hälfte des Dokuments“)
Führen Sie für jeden Batch zusammengehöriger Änderungen Folgendes durch:
a. Text XML zuordnen: Grepen Sie in
word/document.xmlnach dem Text, um zu überprüfen, wie der Text auf<w:r>-Elemente aufgeteilt ist.b. Skript erstellen und ausführen: Verwenden Sie
get_node, um Knoten zu finden, implementieren Sie Änderungen, danndoc.save(). Siehe Abschnitt „Document Library“ in ooxml.md für Muster.Hinweis: Grepen Sie
word/document.xmlimmer unmittelbar vor dem Schreiben eines Skripts, um aktuelle Zeilennummern zu erhalten und den Textinhalt zu überprüfen. Zeilennummern ändern sich nach jedem Skriptdurchlauf. -
Dokument packen: Nachdem alle Batches abgeschlossen sind, konvertieren Sie das entpackte Verzeichnis zurück in .docx:
python ooxml/scripts/pack.py unpacked reviewed-document.docx -
Abschließende Überprüfung: Führen Sie eine umfassende Prüfung des gesamten Dokuments durch:
- Konvertieren Sie das endgültige Dokument in Markdown:
pandoc --track-changes=all reviewed-document.docx -o verification.md - Überprüfen Sie, ob ALLE Änderungen korrekt angewendet wurden:
grep "ursprüngliche Phrase" verification.md # Sollte NICHT gefunden werden grep "Ersatzphrase" verification.md # Sollte gefunden werden - Überprüfen Sie, dass keine unbeabsichtigten Änderungen eingeführt wurden.
- Konvertieren Sie das endgültige Dokument in Markdown:
Konvertieren von Dokumenten in Bilder
Um Word-Dokumente visuell zu analysieren, konvertieren Sie sie in einem zweistufigen Prozess in Bilder:
-
DOCX in PDF konvertieren:
soffice --headless --convert-to pdf document.docx -
PDF-Seiten in JPEG-Bilder konvertieren:
pdftoppm -jpeg -r 150 document.pdf pageDies erstellt Dateien wie
page-1.jpg,page-2.jpgusw.
Optionen:
-r 150: Auflösung auf 150 DPI einstellen (für Qualitäts-/Größenausgleich anpassen)-jpeg: JPEG-Format ausgeben (bei Bedarf-pngfür PNG verwenden)-f N: Erste zu konvertierende Seite (z. B.-f 2beginnt ab Seite 2)-l N: Letzte zu konvertierende Seite (z. B.-l 5stoppt bei Seite 5)page: Präfix für Ausgabedateien
Beispiel für einen bestimmten Bereich:
pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page # Konvertiert nur Seiten 2-5
Code-Stilrichtlinien
WICHTIG: Beim Generieren von Code für DOCX-Operationen:
- Schreiben Sie präzisen Code
- Vermeiden Sie ausführliche Variablennamen und redundante Operationen
- Vermeiden Sie unnötige print-Anweisungen
Abhängigkeiten
Erforderliche Abhängigkeiten (installieren Sie sie, falls nicht verfügbar):
- pandoc:
sudo apt-get install pandoc(für Textextraktion) - docx:
npm install -g docx(zum Erstellen neuer Dokumente) - LibreOffice:
sudo apt-get install libreoffice(für PDF-Konvertierung) - Poppler:
sudo apt-get install poppler-utils(für pdftoppm zur Konvertierung von PDF in Bilder) - defusedxml:
pip install defusedxml(für sicheres XML-Parsing)