Scrivere file DOCX con LdmDocxWriter
Scrivere file DOCX con LdmDocxWriter
LdmDocxWriter converte un oggetto light_document_model.Document (LDM) in un file DOCX. È il corrispondente di scrittura di DocumentReader, che legge i file DOCX e li espone come un albero LDM. Insieme formano una pipeline di round-trip: DocumentReader in, LdmDocxWriter out.
Prerequisiti
| Requisito | Dettaglio |
|---|---|
| Python | 3.9 o versioni successive |
| Package | aspose-words-foss (con licenza MIT) |
| Input | Un’istanza light_document_model.Document |
pip install aspose-words-fossScrivi su un percorso file
LdmDocxWriter.write(doc, output_path) serializza il documento LDM in un file DOCX nel percorso indicato. Se la directory padre del percorso non esiste, la chiamata genererà 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")Scrivi su Bytes (output in memoria)
LdmDocxWriter.write_to_bytes(doc) restituisce il contenuto DOCX come oggetto bytes. Usalo quando devi inviare il file su una rete, archiviarlo in un database o evitare di scrivere sul filesystem del tutto.
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)Modello Round-Trip
Il caso d’uso più comune è un ciclo read-modify-write:
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")Avvisi di Scrittura Lossy
Quando LdmDocxWriter non può rappresentare fedelmente una struttura LDM in formato DOCX, emette un DocxWriterLossyWarning. Puoi catturare questi con il modulo warnings di Python per verificare cosa è stato scartato:
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)Suggerimenti e Buone Pratiche
- Chiama sempre
DocumentReader.to_light_document()prima di passare il documento aLdmDocxWriter— lo scrittore si aspetta un LDMDocument, non unDocumentReadergrezzo. - Usa
write_to_bytes()nei gestori web per evitare la gestione di file temporanei. - Controlla
DocxWriterLossyWarningnei test per rilevare regressioni di round-trip durante l’aggiornamento della libreria. LdmDocxWriter.optionsè disponibile per la configurazione a livello di writer; ispeziona l’oggetto dopo l’instanziazione per vedere le impostazioni disponibili.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
FileNotFoundError su write() | La directory principale non esiste | Crea la directory di output con Path.mkdir(parents=True, exist_ok=True) prima di chiamare write() |
DocxWriterLossyWarning emesso | Costrutto LDM non rappresentabile in DOCX | Rivedi il messaggio di avviso; accetta la perdita o regola il LDM prima di scrivere |
| DOCX di output vuoto | Il documento LDM non contiene sezioni né paragrafi | Verifica che ldm_doc.sections e ldm_doc.all_paragraphs non siano vuoti dopo il caricamento |
FAQ
Cos’è il LDM (light_document_model)?
Il LDM è la rappresentazione astratta e nativa di Python di Aspose.Words FOSS di un documento Word. Disaccoppia la logica del documento dal formato binario DOCX e rende più facile ispezionare e manipolare programmaticamente la struttura del documento.
Posso scrivere in PDF invece di DOCX?
Sì — usa LdmPdfWriter.write(doc, output_path) dello stesso pacchetto per l’output PDF, oppure LdmMarkdownWriter.write(doc, output_path) per Markdown.
write_to_bytes() richiede un percorso di output?
No. write_to_bytes(doc) accetta solo il documento LDM e restituisce un oggetto bytes senza interazione con il filesystem.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
LdmDocxWriter | Converte un LDM Document in un file DOCX |
LdmDocxWriter.write(doc, output_path) | Scrive il DOCX nel percorso file specificato |
LdmDocxWriter.write_to_bytes(doc) | Restituisce il contenuto del DOCX come bytes |
LdmDocxWriter.options | Opzioni di configurazione del Writer |
DocxWriterLossyWarning | Avviso generato quando una struttura LDM viene scartata durante la scrittura |
DocumentReader | Legge un file DOCX e costruisce la rappresentazione LDM |
DocumentReader.to_light_document() | Restituisce il documento caricato come LDM Document |