Scrivere file DOCX con LdmDocxWriter

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

RequisitoDettaglio
Python3.9 o versioni successive
Packageaspose-words-foss (con licenza MIT)
InputUn’istanza light_document_model.Document
pip install aspose-words-foss

Scrivi 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 a LdmDocxWriter — lo scrittore si aspetta un LDM Document, non un DocumentReader grezzo.
  • Usa write_to_bytes() nei gestori web per evitare la gestione di file temporanei.
  • Controlla DocxWriterLossyWarning nei 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

ProblemaCausaCorrezione
FileNotFoundError su write()La directory principale non esisteCrea la directory di output con Path.mkdir(parents=True, exist_ok=True) prima di chiamare write()
DocxWriterLossyWarning emessoCostrutto LDM non rappresentabile in DOCXRivedi il messaggio di avviso; accetta la perdita o regola il LDM prima di scrivere
DOCX di output vuotoIl documento LDM non contiene sezioni né paragrafiVerifica 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 / MetodoDescrizione
LdmDocxWriterConverte 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.optionsOpzioni di configurazione del Writer
DocxWriterLossyWarningAvviso generato quando una struttura LDM viene scartata durante la scrittura
DocumentReaderLegge un file DOCX e costruisce la rappresentazione LDM
DocumentReader.to_light_document()Restituisce il documento caricato come LDM Document

Vedi anche

 Italiano