DOCX-bestanden schrijven met LdmDocxWriter
DOCX-bestanden schrijven met LdmDocxWriter
LdmDocxWriter zet een light_document_model.Document (LDM)-object om in een DOCX-bestand. Het is de schrijf-tegenhanger van DocumentReader, die DOCX-bestanden leest en ze als een LDM-boom blootlegt. Samen vormen ze een round-trip-pijplijn: DocumentReader in, LdmDocxWriter uit.
Vereisten
| Vereiste | Detail |
|---|---|
| Python | 3.9 of hoger |
| Package | aspose-words-foss (MIT-gelicentieerd) |
| Input | Een light_document_model.Document instantie |
pip install aspose-words-fossSchrijf naar een bestandspad
LdmDocxWriter.write(doc, output_path) serialiseert het LDM-document naar een DOCX-bestand op het opgegeven pad. Als de bovenliggende map van het pad niet bestaat, zal de oproep FileNotFoundError genereren.
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")Schrijf naar bytes (In-Memory-output)
LdmDocxWriter.write_to_bytes(doc) retourneert de DOCX-inhoud als een bytes object. Gebruik dit wanneer je het bestand over een netwerk moet verzenden, in een database moet opslaan, of het volledig vermijden om naar het bestandssysteem te schrijven.
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-patroon
De meest voorkomende gebruikssituatie is een read-modify-write round trip:
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")Lossy-Write-waarschuwingen
Wanneer LdmDocxWriter een LDM-constructie niet getrouw kan weergeven in DOCX-formaat, geeft het een DocxWriterLossyWarning uit. Je kunt deze vastleggen met de warnings module van Python om te controleren wat er is weggelaten:
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)Tips en best practices
- Roep altijd
DocumentReader.to_light_document()aan voordat je het document doorgeeft aanLdmDocxWriter— de writer verwacht een LDMDocument, geen ruweDocumentReader. - Gebruik
write_to_bytes()in webhandlers om tijdelijk bestandsbeheer te vermijden. - Controleer
DocxWriterLossyWarningin tests om round-trip regressies te detecteren bij het upgraden van de bibliotheek. LdmDocxWriter.optionsis beschikbaar voor configuratie op schrijversniveau; inspecteer het object na de instantiering om de beschikbare instellingen te zien.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
FileNotFoundError op write() | Bovenliggende map bestaat niet | Maak de uitvoermap aan met Path.mkdir(parents=True, exist_ok=True) voordat write() wordt aangeroepen |
DocxWriterLossyWarning uitgezonden | LDM-construct niet representabel in DOCX | Bekijk de waarschuwingsmelding; accepteer het verlies of pas de LDM aan voordat u schrijft |
| Lege uitvoer-DOCX | LDM-document heeft geen secties of alinea’s | Controleer of ldm_doc.sections en ldm_doc.all_paragraphs niet leeg zijn na het laden |
FAQ
Wat is de LDM (light_document_model)?
De LDM is Aspose.Words FOSS’s abstracte, Python-native weergave van een Word-document. Het ontkoppelt de documentlogica van het binaire DOCX-formaat en maakt het eenvoudiger om de documentstructuur programmatisch te inspecteren en te manipuleren.
Kan ik naar PDF schrijven in plaats van DOCX?
Ja — gebruik LdmPdfWriter.write(doc, output_path) uit hetzelfde pakket voor PDF-uitvoer, of LdmMarkdownWriter.write(doc, output_path) voor Markdown.
Vereist write_to_bytes() een uitvoerpad?
Nee. write_to_bytes(doc) neemt alleen het LDM-document en retourneert een bytes object zonder bestandsysteeminteractie.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
LdmDocxWriter | Converteert een LDM Document naar een DOCX-bestand |
LdmDocxWriter.write(doc, output_path) | Schrijft DOCX naar het opgegeven bestandspad |
LdmDocxWriter.write_to_bytes(doc) | Retourneert de DOCX-inhoud als bytes |
LdmDocxWriter.options | Writer-configuratieopties |
DocxWriterLossyWarning | Waarschuwing die wordt opgegeven wanneer een LDM-construct wordt weggelaten tijdens het schrijven |
DocumentReader | Leest een DOCX-bestand en bouwt de LDM-representatie |
DocumentReader.to_light_document() | Retourneert het geladen document als een LDM Document |