Написание файлов DOCX с помощью LdmDocxWriter
Написание файлов DOCX с помощью LdmDocxWriter
LdmDocxWriter преобразует а light_document_model.Document (LDM) объекта в Это файл DOCX. Он является аналогом записи для DocumentReader, который читает файлы DOCX . Вместе они образуют круговоротную трубопроводку: DocumentReader в, LdmDocxWriter - Выходи.
Prerequisites
| Requirement | Detail |
|---|---|
| Python | 3.9 or later |
| Package | aspose-words-foss (лицензировано MIT) |
| Input | А. - Да . light_document_model.Document примерно |
pip install aspose-words-fossНаписать на путь файла
LdmDocxWriter.write(doc, output_path) Сериализирует документ LDM в DOCX. Если родительский каталог пути не существует, вызов поднимется. 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")Написать в байты (выход из памяти)
LdmDocxWriter.write_to_bytes(doc) возвращает содержание DOCX как bytes Объект. Используйте это, когда вам нужно отправить файл через сеть, хранить его в базе данных или избегать записи в файловую систему полностью.
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)
---
### Поездка в оборот
Наиболее распространенным случаем использования является поездка с чтением-изменением и записью:
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")Предупреждения в виде “потерянного письма”
When LdmDocxWriter не может верно представлять конструкцию LDM в формате DOCX. он излучает … DocxWriterLossyWarning.Вы можете захватить их с помощью Python. warnings модуль для проверки того, что было отброшено:
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)Советы и лучшие практики
- Всегда звони .
DocumentReader.to_light_document()до передачи документа вLdmDocxWriterавтор ожидает LDM.Document, не сырой .DocumentReader. - Использование:
write_to_bytes()в веб-услугах для избежания временного управления файлами. - Check
DocxWriterLossyWarningв испытаниях для обнаружения обратной регрессии, когда: - Я обновляю библиотеку. LdmDocxWriter.optionsдоступна для конфигурации на уровне писателя; проверьте объект после инстанции, чтобы увидеть доступные настройки.
Общие проблемы
| Issue | Cause | Устранить |
|---|---|---|
FileNotFoundError в день: write() | Основной каталог не существует . | Создать выходной каталог с помощью: Path.mkdir(parents=True, exist_ok=True) перед звонком . write() |
DocxWriterLossyWarning выделенные | Конструкция LDM не представлена в DOCX. | Просмотреть предупреждение; принять потерю или скорректировать LDM перед написанием. |
| Пустой выход DOCX | Документ LDM не содержит разделов или пунктов. | Verify ldm_doc.sections и в том числе: ldm_doc.all_paragraphs не пусты после загрузки; |
FAQ
Что такое LDM (light_document_model)?
LDM - это абстрактное представление документа Word на языке Python, которое используется в Aspose.Words FOSS. Он разъединяет логику документов от двоичного формата DOCX и облегчает программистское осмотр и манипулирование структурой документов.
Могу я писать на PDF вместо DOCX?
Да использование LdmPdfWriter.write(doc, output_path) из одного пакета для PDF-файлов. выпуск; или LdmMarkdownWriter.write(doc, output_path) для Маркадаун.
Does write_to_bytes() требуется выходный путь?
- Нет, не могу.
write_to_bytes(doc)принимает только документ LDM и возвращаетbytesобъект без взаимодействия файловой системы.
Справочное резюме API
| Класс / метод | Description |
|---|---|
LdmDocxWriter | Преобразует LDM. Document в файл DOCX |
LdmDocxWriter.write(doc, output_path) | Написывает DOCX на указанный путь файла . |
LdmDocxWriter.write_to_bytes(doc) | Возвращает содержание DOCX как: bytes |
LdmDocxWriter.options | Опции конфигурации писателя |
DocxWriterLossyWarning | Предупреждение, возникающее при выходе конструкции LDM во время записи. |
DocumentReader | Читает файл DOCX и создаёт LDM-представление. |
DocumentReader.to_light_document() | Возвращает загруженный документ в виде LDM. Document |