Zapisování souborů DOCX pomocí LdmDocxWriter
Zapisování souborů DOCX pomocí LdmDocxWriter
LdmDocxWriter převádí objekt light_document_model.Document (LDM) na soubor DOCX. Je to zápisová protějšek k DocumentReader, který čte soubory DOCX a zpřístupňuje je jako strom LDM. Společně tvoří obousměrný kanál: DocumentReader dovnitř, LdmDocxWriter ven.
Požadavky
| Požadavek | Detail |
|---|---|
| Python | 3.9 nebo novější |
| Package | aspose-words-foss (licencováno pod MIT) |
| Input | Instance light_document_model.Document |
pip install aspose-words-fossZapsat do souborové cesty
LdmDocxWriter.write(doc, output_path) serializuje dokument LDM do souboru DOCX na zadané cestě. Pokud nadřazený adresář cesty neexistuje, volání vyvolá FileNotFoundError.
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")Zapsat do bajtů (výstup v paměti)
LdmDocxWriter.write_to_bytes(doc) vrací obsah DOCX jako objekt bytes. Použijte to, když potřebujete soubor poslat přes síť, uložit jej do databáze nebo se úplně vyhnout zápisu na souborový systém.
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)Vzor round-trip
Nejčastějším případem použití je průchod čtení-úprava-zápis:
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")Varování při ztrátovém zápisu
Když LdmDocxWriter nedokáže věrně reprezentovat konstrukci LDM v formátu DOCX, vydá DocxWriterLossyWarning. Tyto můžete zachytit pomocí modulu warnings v Python, abyste auditovali, co bylo vynecháno:
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)Tipy a osvědčené postupy
- Vždy zavolejte
DocumentReader.to_light_document()před předáním dokumentu doLdmDocxWriter— zapisovač očekává LDMDocument, nikoli surovýDocumentReader. - Použijte
write_to_bytes()ve webových obslužných funkcích, abyste se vyhnuli správě dočasných souborů. - Zkontrolujte
DocxWriterLossyWarningv testech, abyste odhalili regresní chyby při zpětném průchodu při aktualizaci knihovny. LdmDocxWriter.optionsje k dispozici pro konfiguraci na úrovni zapisovače; prohlédněte objekt po vytvoření, abyste viděli dostupná nastavení.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
FileNotFoundError na write() | Nadřazený adresář neexistuje | Vytvořte výstupní adresář pomocí Path.mkdir(parents=True, exist_ok=True) před voláním write() |
DocxWriterLossyWarning emitováno | Konstrukce LDM nelze v DOCX reprezentovat | Zkontrolujte varovnou zprávu; přijměte ztrátu nebo upravte LDM před zápisem |
| Prázdný výstupní DOCX | Dokument LDM neobsahuje žádné sekce ani odstavce | Ověřte, že ldm_doc.sections a ldm_doc.all_paragraphs nejsou po načtení prázdné |
FAQ
Co je LDM (light_document_model)?
LDM je abstraktní, Python-nativní reprezentace Word dokumentu od Aspose.Words FOSS. Odděluje logiku dokumentu od binárního formátu DOCX a usnadňuje programově prohlížet a manipulovat se strukturou dokumentu.
Mohu zapisovat do PDF místo DOCX?
Ano — použijte LdmPdfWriter.write(doc, output_path) ze stejného balíčku pro výstup PDF, nebo LdmMarkdownWriter.write(doc, output_path) pro Markdown.
Vyžaduje write_to_bytes() výstupní cestu?
Ne. write_to_bytes(doc) bere pouze dokument LDM a vrací objekt bytes bez interakce se souborovým systémem.
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
LdmDocxWriter | Převede LDM Document na soubor DOCX |
LdmDocxWriter.write(doc, output_path) | Zapíše DOCX do zadané cesty souboru |
LdmDocxWriter.write_to_bytes(doc) | Vrací obsah DOCX jako bytes |
LdmDocxWriter.options | Možnosti konfigurace zapisovače |
DocxWriterLossyWarning | Varování vyvoláno, když je během zápisu vynechána konstrukce LDM |
DocumentReader | Načte soubor DOCX a vytvoří reprezentaci LDM |
DocumentReader.to_light_document() | Vrací načtený dokument jako LDM Document |