ساخت یک مدل سند سبک با DocumentReader

ساخت یک مدل سند سبک با DocumentReader

ساخت مدل سند سبک با DocumentReader

DocumentReader نقطه ورودی برای خواندن فایل‌های DOCX در Aspose.Words FOSS است. این ابزار ورودی را به‌صورت مسیر فایل، یک جریان I/O یا بایت‌های خام می‌پذیرد و سپس سند را به‌صورت یک light_document_model.Document (LDM) — یک درخت شیء ساختاری Python که بررسی و تبدیل آن آسان است — در دسترس قرار می‌دهد.


پیش‌نیازها

نیازمندیجزئیات
Python۳.۹ یا بعد
Packageaspose-words-foss (MIT-licensed)
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])

نکات و بهترین شیوه‌ها

  • همواره قبل از فراخوانی to_light_document()، load_file()، load_stream() یا load_bytes() را صدا بزنید — فراخوانی 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() را فراخوانی کنید

FAQ

LDM چیست؟

مدل سند سبک (light_document_model.Document) یک درخت شیء انتزاعی و بومی Python است که نمایانگر یک سند Word می‌باشد. این مدل منطق سند را از قالب باینری DOCX جدا می‌کند و برای دستکاری برنامه‌ای آسان طراحی شده است.

آیا می‌توانم LDM را اصلاح کنم و دوباره به DOCX بنویسم؟

بله. پس از اصلاح doc شیء، آن را به LdmDocxWriter.write(doc, path) تا یک فایل DOCX به‌روز شده تولید شود. ببینید the راهنمای LdmDocxWriter برای جزئیات.

LdmBuilderMixin چه چیزی اضافه می‌کند؟

LdmBuilderMixin متد to_light_document() را فراهم می‌کند. DocumentReader از آن ارث می‌برد، بنابراین همیشه این متد را از طریق نمونهٔ خواننده دسترسی دارید.


خلاصه 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 برمی‌گرداند
LdmBuilderMixinمیکسینی که to_light_document() را فراهم می‌کند
Document.sectionsفهرست بخش‌های سند
Document.all_paragraphsفهرست ساده تمام پاراگراف‌ها
Document.textمحتویات کامل متنی ساده سند
Document.page_countتعداد صفحات
Document.headings(max_level)فهرست پاراگراف‌های عنوان تا max_level

همچنین ببینید:

 فارسی