Zapisywanie plików DOCX przy użyciu LdmDocxWriter

Zapisywanie plików DOCX przy użyciu LdmDocxWriter

Zapisywanie plików DOCX przy użyciu LdmDocxWriter

LdmDocxWriter konwertuje obiekt light_document_model.Document (LDM) na plik DOCX. Jest odpowiednikiem zapisu dla DocumentReader, który odczytuje pliki DOCX i udostępnia je jako drzewo LDM. Razem tworzą pipeline dwukierunkowy: DocumentReader wejście, LdmDocxWriter wyjście.


Wymagania wstępne

WymaganieSzczegóły
Python3.9 lub nowszy
Packageaspose-words-foss (na licencji MIT)
InputInstancja light_document_model.Document
pip install aspose-words-foss

Zapis do ścieżki pliku

LdmDocxWriter.write(doc, output_path) serializuje dokument LDM do pliku DOCX w podanej ścieżce. Jeśli katalog nadrzędny ścieżki nie istnieje, wywołanie zgłosi 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")

Zapis do bajtów (wyjście w pamięci)

LdmDocxWriter.write_to_bytes(doc) zwraca zawartość DOCX jako obiekt bytes. Użyj tego, gdy musisz wysłać plik przez sieć, przechowywać go w bazie danych lub całkowicie uniknąć zapisu na systemie plików.

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)

Wzorzec Round-Trip

Najczęstszym przypadkiem użycia jest cykl odczyt-modyfikacja-zapis:

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")

Ostrzeżenia o utracie przy zapisie

Gdy LdmDocxWriter nie może wiernie przedstawić konstrukcji LDM w formacie DOCX, generuje DocxWriterLossyWarning. Możesz je przechwycić za pomocą modułu warnings Python, aby audytować, co zostało pominięte:

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)

Wskazówki i najlepsze praktyki

  • Zawsze wywołuj DocumentReader.to_light_document() przed przekazaniem dokumentu do LdmDocxWriter — writer oczekuje LDM Document, a nie surowego DocumentReader.
  • Używaj write_to_bytes() w obsłudze webowych, aby uniknąć zarządzania plikami tymczasowymi.
  • Sprawdź DocxWriterLossyWarning w testach, aby wykryć regresje przy pełnym cyklu podczas aktualizacji biblioteki.
  • LdmDocxWriter.options jest dostępny do konfiguracji na poziomie pisarza; przejrzyj obiekt po jego utworzeniu, aby zobaczyć dostępne ustawienia.

Typowe problemy

ProblemPrzyczynaPoprawka
FileNotFoundError na write()Katalog nadrzędny nie istniejeUtwórz katalog wyjściowy przy pomocy Path.mkdir(parents=True, exist_ok=True) przed wywołaniem write()
DocxWriterLossyWarning wyemitowanoKonstrukcja LDM nie może być przedstawiona w DOCXPrzejrzyj komunikat ostrzegawczy; zaakceptuj utratę lub dostosuj LDM przed zapisem
Pusty plik wyjściowy DOCXDokument LDM nie zawiera sekcji ani akapitówSprawdź, czy ldm_doc.sections i ldm_doc.all_paragraphs nie są puste po załadowaniu

FAQ

Czym jest LDM (light_document_model)?

LDM jest abstrakcyjną, natywną dla Python reprezentacją dokumentu Word opracowaną przez Aspose.Words FOSS. Oddziela logikę dokumentu od binarnego formatu DOCX i ułatwia programowe przeglądanie oraz manipulowanie strukturą dokumentu.

Czy mogę zapisać jako PDF zamiast DOCX?

Tak — użyj LdmPdfWriter.write(doc, output_path) z tego samego pakietu do wyjścia PDF lub LdmMarkdownWriter.write(doc, output_path) do Markdown.

Czy write_to_bytes() wymaga ścieżki wyjściowej?

Nie. write_to_bytes(doc) przyjmuje tylko dokument LDM i zwraca obiekt bytes bez interakcji z systemem plików.


Podsumowanie API Reference

Klasa / MetodaOpis
LdmDocxWriterKonwertuje LDM Document na plik DOCX
LdmDocxWriter.write(doc, output_path)Zapisuje DOCX do określonej ścieżki pliku
LdmDocxWriter.write_to_bytes(doc)Zwraca zawartość DOCX jako bytes
LdmDocxWriter.optionsOpcje konfiguracji zapisu
DocxWriterLossyWarningOstrzeżenie wyświetlane, gdy konstrukcja LDM zostaje pominięta podczas zapisu
DocumentReaderOdczytuje plik DOCX i tworzy reprezentację LDM
DocumentReader.to_light_document()Zwraca załadowany dokument jako LDM Document

Zobacz także

 Polski