DOCX-Dateien mit LdmDocxWriter schreiben
DOCX-Dateien schreiben mit LdmDocxWriter
LdmDocxWriter konvertiert ein light_document_model.Document (LDM)-Objekt in eine DOCX-Datei. Es ist das Schreib-Pendant zu DocumentReader, das DOCX-Dateien liest und sie als LDM-Baum bereitstellt. Zusammen bilden sie eine Round-Trip-Pipeline: DocumentReader in, LdmDocxWriter out.
Voraussetzungen
| Anforderung | Detail |
|---|---|
| Python | 3.9 oder neuer |
| Package | aspose-words-foss (MIT-lizenziert) |
| Input | Eine light_document_model.Document Instanz |
pip install aspose-words-fossIn einen Dateipfad schreiben
LdmDocxWriter.write(doc, output_path) serialisiert das LDM-Dokument in eine DOCX-Datei am angegebenen Pfad. Wenn das übergeordnete Verzeichnis des Pfads nicht existiert, löst der Aufruf FileNotFoundError aus.
from aspose.words_foss import DocumentReader, LdmDocxWriter
# Load a DOCX and obtain its LDM representation
reader = DocumentReader()
reader.load_file("input/original.docx")
ldm_doc = reader.to_light_document()
# Write the LDM document back to a DOCX file
writer = LdmDocxWriter()
writer.write(ldm_doc, "output/result.docx")
print("Written to output/result.docx")In Bytes schreiben (Ausgabe im Speicher)
LdmDocxWriter.write_to_bytes(doc) gibt den DOCX-Inhalt als bytes-Objekt zurück. Verwenden Sie dies, wenn Sie die Datei über ein Netzwerk senden, in einer Datenbank speichern oder das Schreiben auf das Dateisystem vollständig vermeiden müssen.
from aspose.words_foss import DocumentReader, LdmDocxWriter
reader = DocumentReader()
reader.load_file("input/report.docx")
ldm_doc = reader.to_light_document()
writer = LdmDocxWriter()
docx_bytes = writer.write_to_bytes(ldm_doc)
print(f"DOCX bytes: {len(docx_bytes)}")
# Save manually if desired
with open("output/report_copy.docx", "wb") as f:
f.write(docx_bytes)Round-Trip-Muster
Der häufigste Anwendungsfall ist ein Lese-Änder-Schreibe-Durchlauf:
from aspose.words_foss import DocumentReader, LdmDocxWriter
reader = DocumentReader()
reader.load_file("input/template.docx")
ldm_doc = reader.to_light_document()
# Inspect or modify the LDM here
print("Sections:", len(ldm_doc.sections))
print("Paragraphs:", len(ldm_doc.all_paragraphs))
writer = LdmDocxWriter()
writer.write(ldm_doc, "output/modified.docx")Verlustbehaftete Schreibwarnungen
Wenn LdmDocxWriter ein LDM-Konstrukt im DOCX-Format nicht treu wiedergeben kann, erzeugt es ein DocxWriterLossyWarning. Sie können diese mit dem warnings-Modul von Python erfassen, um zu prüfen, was verworfen wurde:
import warnings
from aspose.words_foss import DocumentReader, LdmDocxWriter, DocxWriterLossyWarning
reader = DocumentReader()
reader.load_file("input/complex.docx")
ldm_doc = reader.to_light_document()
writer = LdmDocxWriter()
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always", DocxWriterLossyWarning)
writer.write(ldm_doc, "output/complex_out.docx")
for warning in w:
print("Lossy:", warning.message)Tipps und bewährte Vorgehensweisen
- Rufen Sie stets
DocumentReader.to_light_document()auf, bevor Sie das Dokument anLdmDocxWriterübergeben – der Writer erwartet ein LDMDocument, nicht ein rohesDocumentReader. - Verwenden Sie
write_to_bytes()in Web-Handlern, um die Verwaltung temporärer Dateien zu vermeiden. - Überprüfen Sie
DocxWriterLossyWarningin Tests, um Round-Trip-Regressionen beim Upgrade der Bibliothek zu erkennen. LdmDocxWriter.optionsist für Konfiguration auf Schreiberebene verfügbar; prüfen Sie das Objekt nach der Instanziierung, um die verfügbaren Einstellungen zu sehen.
Häufige Probleme
| Problem | Ursache | Behebung |
|---|---|---|
FileNotFoundError auf write() | Übergeordnetes Verzeichnis existiert nicht | Erstelle das Ausgabeverzeichnis mit Path.mkdir(parents=True, exist_ok=True), bevor write() aufgerufen wird |
DocxWriterLossyWarning ausgegeben | LDM-Konstrukt nicht in DOCX darstellbar | Überprüfen Sie die Warnmeldung; akzeptieren Sie den Verlust oder passen Sie das LDM vor dem Schreiben an |
| Leere DOCX-Ausgabe | LDM-Dokument hat keine Abschnitte oder Absätze | Überprüfen Sie, dass ldm_doc.sections und ldm_doc.all_paragraphs nach dem Laden nicht leer sind |
FAQ
Was ist das LDM (light_document_model)?
Das LDM ist die abstrakte, Python-native Darstellung eines Word-Dokuments von Aspose.Words FOSS. Es entkoppelt die Dokumentlogik vom binären DOCX-Format und erleichtert das programmgesteuerte Inspektieren und Manipulieren der Dokumentstruktur.
Kann ich statt DOCX in PDF schreiben?
Ja — verwenden Sie LdmPdfWriter.write(doc, output_path) aus demselben Paket für die PDF-Ausgabe oder LdmMarkdownWriter.write(doc, output_path) für Markdown.
Benötigt write_to_bytes() einen Ausgabepfad?
Nein. write_to_bytes(doc) verarbeitet nur das LDM-Dokument und gibt ein bytes-Objekt zurück, ohne Dateisysteminteraktion.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
LdmDocxWriter | Konvertiert ein LDM Document in eine DOCX-Datei |
LdmDocxWriter.write(doc, output_path) | Schreibt die DOCX an den angegebenen Dateipfad |
LdmDocxWriter.write_to_bytes(doc) | Gibt den DOCX-Inhalt als bytes zurück |
LdmDocxWriter.options | Writer-Konfigurationsoptionen |
DocxWriterLossyWarning | Warnung, die ausgegeben wird, wenn ein LDM-Konstrukt beim Schreiben verworfen wird |
DocumentReader | Liest eine DOCX-Datei und erstellt die LDM-Darstellung |
DocumentReader.to_light_document() | Gibt das geladene Dokument als LDM Document zurück |