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
| Wymaganie | Szczegóły |
|---|---|
| Python | 3.9 lub nowszy |
| Package | aspose-words-foss (na licencji MIT) |
| Input | Instancja light_document_model.Document |
pip install aspose-words-fossZapis 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 doLdmDocxWriter— writer oczekuje LDMDocument, a nie surowegoDocumentReader. - Używaj
write_to_bytes()w obsłudze webowych, aby uniknąć zarządzania plikami tymczasowymi. - Sprawdź
DocxWriterLossyWarningw testach, aby wykryć regresje przy pełnym cyklu podczas aktualizacji biblioteki. LdmDocxWriter.optionsjest dostępny do konfiguracji na poziomie pisarza; przejrzyj obiekt po jego utworzeniu, aby zobaczyć dostępne ustawienia.
Typowe problemy
| Problem | Przyczyna | Poprawka |
|---|---|---|
FileNotFoundError na write() | Katalog nadrzędny nie istnieje | Utwórz katalog wyjściowy przy pomocy Path.mkdir(parents=True, exist_ok=True) przed wywołaniem write() |
DocxWriterLossyWarning wyemitowano | Konstrukcja LDM nie może być przedstawiona w DOCX | Przejrzyj komunikat ostrzegawczy; zaakceptuj utratę lub dostosuj LDM przed zapisem |
| Pusty plik wyjściowy DOCX | Dokument LDM nie zawiera sekcji ani akapitów | Sprawdź, 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 / Metoda | Opis |
|---|---|
LdmDocxWriter | Konwertuje 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.options | Opcje konfiguracji zapisu |
DocxWriterLossyWarning | Ostrzeżenie wyświetlane, gdy konstrukcja LDM zostaje pominięta podczas zapisu |
DocumentReader | Odczytuje plik DOCX i tworzy reprezentację LDM |
DocumentReader.to_light_document() | Zwraca załadowany dokument jako LDM Document |