کار با DOCX Reader
کار با خواننده DOCX
کلاس DocumentReader فایلهای Office Open XML (.docx) را میخواند و یک ساختار دادهٔ انتزاعی — مدل سند سبک (LDM) — تولید میکند. این کلاس پاراگرافها، جدولها، اشکال، تصاویر و قالببندی را مدیریت میکند و محتوا را برای دستکاری یا تبدیل در دسترس میگذارد.
خواندن یک فایل DOCX
سادهترین روش استفاده از سازندهٔ Document است که بهصورت خودکار DocumentReader را برای فایلهای .docx انتخاب میکند:
import aspose.words_foss as aw
doc = aw.Document("input.docx")
print(f"Sections: {len(doc.sections)}")
for para in doc.all_paragraphs:
print(para.text)DocumentReader معماری
DocumentReader از دو میکسین برای تقسیم مسئولیتها استفاده میکند:
| Component | Role |
|---|---|
DocumentReader | تحلیلگر اصلی DOCX — بخشهای XML را از بسته OPC میخواند |
LdmBuilderMixin | مدل سبک سند را از دادههای تجزیهشده میسازد |
ShapeParserMixin | عناصر رسم و شکل جاسازیشده در سند را تجزیه میکند |
هر سه بهصورت داخلی با هم کار میکنند — شما از طریق Document API با نتیجه تعامل دارید.
استخراج متن
از ویژگی text در یک سند بارگذاریشده برای استخراج متن ساده بدون ذخیره در فایل استفاده کنید:
import aspose.words_foss as aw
doc = aw.Document("contract.docx")
text = doc.text
print(text[:500])کار با پاراگرافها و قالببندی
دسترسی به ویژگیهای سطح پاراگراف از طریق LDM:
import aspose.words_foss as aw
doc = aw.Document("styled.docx")
for para in doc.all_paragraphs:
for run in para.runs:
if run.font.bold:
print(f"Bold: {run.text}")هر Run ویژگیهای قلم (ضخیم، کج، اندازه، رنگ) را که از XML DOCX تجزیه شدهاند، حمل میکند.
کار با اشکال و تصاویر
ShapeParserMixin هنگام تجزیه عناصر رسم را استخراج میکند. اشکال بهعنوان اشیاء ShapeNode در محتوای پاراگراف در LDM ظاهر میشوند:
import aspose.words_foss as aw
doc = aw.Document("with-images.docx")
for para in doc.all_paragraphs:
for node in para.content_sequence:
if hasattr(node, 'shape_type'):
print(f"Shape: {node.shape_type}")نکات و بهترین شیوهها
- از
Document("file.docx")برای گردشکارهای استاندارد استفاده کنید — بهصورت خودکار انتخاب خواننده، اعتبارسنجی بسته و ساختار LDM را مدیریت میکند. - برای ورودی مبتنی بر جریان (آپلودهای وب)، یک شی شبیه-فایل را به سازندهٔ
Documentپاس دهید. - برای فایلهای حاوی جدولها، از طریق
doc.tablesیاdoc.all_tablesبه آنها دسترسی پیدا کنید. - برای پردازش دستهای، از همان فرآیند Python مجدداً استفاده کنید تا از هزینهٔ مکرر وارد کردن جلوگیری شود.
مشکلات رایج
| مسئله | علت | رفع |
|---|---|---|
| فایل بار نمیشود (استثنا) | آرشیو ZIP خراب یا ناقص | تأیید کنید که فایل یک .docx معتبر (ZIP-مبتنی بر بسته OPC) است |
| تصاویر گمشده در خروجی | قطعات تصویر در بسته جاسازی نشدهاند | بررسی کنید که DOCX شامل تصاویر جاسازیشده (نه لینکشده) باشد |
| محتوا گمشده در خروجی | قطعات مورد نیاز XML در بسته موجود نیستند | ممکن است فایل قطع شده باشد؛ دوباره از برنامه منبع صادر کنید |
FAQ
مدل سند Light (LDM) چیست؟
LDM نمایهٔ داخلی است که بین همهٔ خوانندهها بهاشتراکگذاری میشود. این مدل جزئیات خاص فرمتها (OPC XML، باینری OLE2) را بهصورت ساختاری مشترک شامل بخشها، پاراگرافها، رانها، جدولها و اشکال انتزاع میکند.
آیا DocumentReader میتواند فایلهای DOCM (macro-enabled) را پردازش کند؟
فایلهای Macro-enabled .docm از همان ساختار OPC استفاده میکنند. خواننده میتواند محتوای سند را تجزیه کند، اما ماکروها حفظ یا اجرا نمیشوند.
چگونه خواننده اسناد بزرگ را مدیریت میکند؟
خواننده بخشهای XML را بهصورت متوالی پردازش میکند. مصرف حافظه با اندازه سند مقیاس مییابد. برای اسناد بسیار بزرگ، پردازش بخشها بهصورت جداگانه را در نظر بگیرید.
API Reference خلاصه
| کلاس / متد | توضیح |
|---|---|
DocumentReader | اسناد DOCX را میخواند و ساختارهای دادهٔ انتزاعی تولید میکند |
LdmBuilderMixin | Mixin ارائهدهندهٔ روشهای ساخت مدل سند Light |
ShapeParserMixin | Mixin ارائهدهندهٔ روشهای تجزیهٔ رسم/شکل |
Document | یک سند Word را نشان میدهد (ریشه LDM) |
create_reader(path) | کارخانهای که خوانندهٔ مناسب را برای پسوند فایل برمیگرداند |