ساخت یک مدل سند سبک با DocumentReader
ساخت مدل سند سبک با DocumentReader
DocumentReader نقطه ورودی برای خواندن فایلهای DOCX در Aspose.Words FOSS است. این ابزار ورودی را بهصورت مسیر فایل، یک جریان I/O یا بایتهای خام میپذیرد و سپس سند را بهصورت یک light_document_model.Document (LDM) — یک درخت شیء ساختاری Python که بررسی و تبدیل آن آسان است — در دسترس قرار میدهد.
پیشنیازها
| نیازمندی | جزئیات |
|---|---|
| Python | ۳.۹ یا بعد |
| Package | aspose-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 |