Écrire des fichiers DOCX avec LdmDocxWriter
Écrire des fichiers DOCX avec LdmDocxWriter
LdmDocxWriter Converter A light_document_model.Document (LDM) objet dans un Docx : c’est le mot de passe pour DocumentReader,qui lit les fichiers DOCX et les exposent comme un arbre LDM. Ensemble ils forment une pipeline rond-trip: DocumentReader dans le, LdmDocxWriter à l’extérieur.
Principaux
| Requirements | détails |
|---|---|
| Python | 3.9 or later |
| Package | aspose-words-foss (Mont en licence) |
| Introduction | A light_document_model.Document instance |
pip install aspose-words-fossÉcrire à un fichier de route
LdmDocxWriter.write(doc, output_path) Sérialiser le document LDM à un DOCX fichier sur la route donnée. si le directeur parent de la voie n’existe pas la Il va augmenter 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")Écrire à des bits (en mémoire)
LdmDocxWriter.write_to_bytes(doc) Il revient le contenu DOCX en tant que bytes objets . Utilisez-le lorsque vous devez envoyer le fichier sur un réseau, le stocker dans une base de données ou Évitez d’écrire dans le fichier entier.
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)Le modèle de route rond
Le cas d’utilisation le plus courant est un voyage en rond de lecture-modification-écrite:
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")Avertissements de la perte
Quand LdmDocxWriter ne peut fidèlement représenter un constructe LDM dans le format DOCX Il émet une DocxWriterLossyWarning.Vous pouvez les capturer avec Python. warnings Module pour vérifier ce qui a été jeté:
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)Conseils et meilleures pratiques
- Toujours appeler
DocumentReader.to_light_document()Avant de passer le document àLdmDocxWriter- l’auteur attend un LDMDocument,Pas une raideDocumentReader. - Utiliser
write_to_bytes()dans les serveurs web pour éviter la gestion temporaire des fichiers. - Vérifier
DocxWriterLossyWarningdes tests pour détecter les regressions rondes lorsqu’elles sont Mise à jour de la bibliothèque. LdmDocxWriter.optionsest disponible pour la configuration au niveau d’auteur; inspecter le Objet après instantiation pour voir les paramètres disponibles.
Les problèmes communs
| Problème | Cause | Fixé |
|---|---|---|
FileNotFoundError sur write() | Le directeur parent n’existe pas | Créer le catalogue de sortie avec Path.mkdir(parents=True, exist_ok=True) Avant de appeler write() |
DocxWriterLossyWarning Émetté | LDM construit non représentable dans DOCX | Réviser le message d’alerte; accepter la perte ou ajuster le LDM avant de l’écrire |
| Débit de la DOCX | Le document LDM n’a pas de sections ou de paragraphes. | Vérification ldm_doc.sections et ldm_doc.all_paragraphs Non-pouché après la charge |
FAQ
Qu’est-ce que le MQ (light_document_model)?
Le LDM est Aspose.Words FOSS, la représentation abstraite et Python-native d’un document Word. Il découpage la logique du document du format binaire DOCX et il facilite l’inspection et la manipulation de la structure du dossier programmée.
Puis-je écrire en PDF au lieu de DOCX ?
Oui - Utiliser LdmPdfWriter.write(doc, output_path) du même paquet pour PDF de production, ou LdmMarkdownWriter.write(doc, output_path) pour le Markdown.
Le fait write_to_bytes() Besoin d’un chemin de départ ?
Non pas. write_to_bytes(doc) Il n’a pas de document LDM et il revient à un bytes Objets Pas d’interaction de fichier.
Le résumé de référence API
| Classes / Méthodes | Description |
|---|---|
LdmDocxWriter | Convertir un LDM Document Pour un fichier DOCX |
LdmDocxWriter.write(doc, output_path) | Écrire DOCX sur la voie de fichier spécifiée |
LdmDocxWriter.write_to_bytes(doc) | Retourner le contenu DOCX comme bytes |
LdmDocxWriter.options | Options de configuration d’écrivain |
DocxWriterLossyWarning | Avertissement élevé lorsque un constructe LDM est tombé pendant l’écriture |
DocumentReader | Lire un fichier DOCX et créer la représentation LDM |
DocumentReader.to_light_document() | Retourner le document chargé en tant que LDM Document |