Создание лёгкой модели документа с DocumentReader

Создание лёгкой модели документа с DocumentReader

Создание Light Document Model с DocumentReader

DocumentReader является точкой входа для чтения файлов DOCX в Aspose.Words FOSS. Он принимает ввод в виде пути к файлу, I/O-потока или необработанных байтов, затем предоставляет документ в виде light_document_model.Document (LDM) — структурированного дерева объектов Python, которое легко просматривать и преобразовывать.


Предварительные требования

ТребованиеПодробность
Python3.9 или новее
Packageaspose-words-foss (лицензия MIT)
InputФайл .docx, поток или bytes
pip install aspose-words-foss

Загрузка из пути к файлу

DocumentReader.load_file(filepath) читает файл DOCX по пути. Затем вызовите to_light_document(), чтобы получить представление LDM.

from aspose.words_foss import DocumentReader

reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()

print("Page count:", doc.page_count)
print("Sections:", len(doc.sections))

Загрузка из потока

DocumentReader.load_stream(stream) принимает любой объект, подобный файлу, с методом read(). Это полезно для данных, поступающих из ответов HTTP, архивов ZIP или буферов в памяти.

from aspose.words_foss import DocumentReader

reader = DocumentReader()
with open("data/report.docx", "rb") as fh:
    reader.load_stream(fh)

doc = reader.to_light_document()
print("Paragraphs:", len(doc.all_paragraphs))

Загрузка из байтов

DocumentReader.load_bytes(data) принимает объект bytes или bytearray. Используйте это, когда содержимое DOCX уже находится в памяти (например, получено из базы данных или построено программно).

from aspose.words_foss import DocumentReader

with open("data/report.docx", "rb") as fh:
    data = fh.read()

reader = DocumentReader()
reader.load_bytes(data)
doc = reader.to_light_document()
print("Text preview:", doc.text[:200])

Навигация по структуре LDM

После вызова to_light_document() возвращаемый объект Document раскрывает полное дерево документа:

from aspose.words_foss import DocumentReader

reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()

# Sections
for section in doc.sections:
    print("Section paragraphs:", len(section.paragraphs))

# All paragraphs (flat list across all sections)
for para in doc.all_paragraphs:
    if para.text.strip():
        print(" -", para.text[:80])

# Headings
for heading in doc.headings(max_level=2):
    print("H:", heading.text)

Чтение полного текста документа

Document.text возвращает полный текстовый контент документа, объединяя весь текст абзацев из всех разделов:

reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print(doc.text[:500])

Советы и лучшие практики

  • Всегда вызывайте load_file(), load_stream() или load_bytes() перед вызовом to_light_document() — вызов to_light_document() на незагруженном ридере может вызвать ошибку или вернуть пустой документ.
  • Используйте load_bytes(), когда вы контролируете жизненный цикл документа в памяти; это избегает открытия файловых дескрипторов.
  • Используйте doc.all_paragraphs для плоской итерации по всем абзацам; используйте doc.sections, когда нужно работать раздел за разделом.
  • DocumentReader реализует LdmBuilderMixin, что означает, что to_light_document() доступен как метод-миксин — тот же интерфейс используется другими классами-ридерами в библиотеке.

Распространённые проблемы

ПроблемаПричинаИсправление
Пустой doc.sections после загрузкиФайл не является действительным DOCXУбедитесь, что файл открывается в Word; проверьте, что он не защищён паролем
doc.all_paragraphs пустойВ документе нет основного текста (например, только заголовки/нижние колонтитулы)Проверьте вместо этого doc.header_paragraphs и doc.footer_paragraphs
AttributeError на to_light_document()Метод загрузки не был вызван перед конвертациейСначала вызовите один из load_file(), load_stream() или load_bytes() first

FAQ

Что такое LDM?

Лёгкая модель документа (light_document_model.Document) — это абстрагированное, Python-нативное дерево объектов, представляющее документ Word. Она отделяет логику документа от двоичного формата DOCX и разработана для простого программного манипулирования.

Могу ли я изменить LDM и записать его обратно в DOCX?

Да. После изменения the doc объект, передайте его в LdmDocxWriter.write(doc, path) для создания обновлённого файла DOCX. См. the руководство LdmDocxWriter для подробностей.

Что добавляет LdmBuilderMixin?

LdmBuilderMixin предоставляет метод to_light_document(). DocumentReader наследуется от него, поэтому вы всегда обращаетесь к этому методу через экземпляр reader.


API Reference Сводка

Класс / МетодОписание:
DocumentReaderЧитает ввод DOCX и создает представление LDM.
DocumentReader.load_file(filepath)Загружает файл DOCX по пути
DocumentReader.load_stream(stream)Загружает из потока, похожего на файл
DocumentReader.load_bytes(data)Загружает из объекта bytes
DocumentReader.to_light_document()Возвращает загруженный документ в виде LDM Document
LdmBuilderMixinMixin, предоставляющий to_light_document()
Document.sectionsСписок разделов в документе
Document.all_paragraphsПлоский список всех абзацев
Document.textПолное содержимое документа в виде простого текста
Document.page_countКоличество страниц
Document.headings(max_level)Список абзацев заголовков до max_level

См. также:

 Русский