خط لوله رندر
از سند تا تصاویر صفحه
بین OpenDocumentAsync و PNGی که به مرورگر میرسد دو مرحلهٔ متمایز وجود دارد: حلکنندهٔ نمایشگر (کدام موتور سند را بارگذاری میکند، که یکبار برای هر باز کردن تصمیمگیری میشود) و پردازش صفحه (چه اتفاقی برای هر تصویر صفحه در هر درخواست میافتد). دانستن هر دو سبب میشود بفهمیم چرا یک فرمت بهاین شکل رندر میشود — و DefaultRender واقعاً چه چیزی را تغییر میدهد.
مرحله ۱ — حلکنندهٔ نمایشگر فرمت
کارخانهٔ نمایشگر، پسوند فایل را از طریق فهرست فرمتها به یک نمایشگر مرتبط میکند و این کار با سه سطح اولویت انجام میشود:
- نمایشگرهای سفارشی ابتدا. هر چیزی که با
DoconutOptions.RegisterViewer(extension, factory, defaultConfig?)ثبت کردهاید، بر تمام نمایشگرهای پیشفرض برتری دارد. - نمایشگرهای خانوادهای داخلی. فهرست هر پسوند قابل نمایش را به یک خانوادهٔ نمایشگر — Word، Excel، PowerPoint، Pdf، Cad، Dgn، Image، Tiff، Psd، Email، Visio، Project، Xps، Epub، Txt، Html، Mht، Dcn — مرتبط میکند که هر کدام آداپتور موتور مخصوص خود را دارند. اگر یک افزونهٔ دارای مجوز، نمایشگری برای همان پسوند ارائه دهد، نمایشگر افزونه جایگزین نمایشگر داخلی میشود.
AddDoconut()در زمان راهاندازی، مجوزهای ثبتشدهٔ افزونهها را اعتبارسنجی میکند؛ بازگشت کارخانه به نمایشگر داخلی یک قانون دفاعی در زمان اجرا است. - فرمتهای فقط‑افزونهای. برخی پسوندها اصلاً نمایشگر داخلی ندارند — DICOM (
.dcm) فقط از طریق افزونهٔ DICOM موجود است. باز کردن چنین فایلی بدون داشتن قابلیت مورد نیاز خطای زیر را میاندازد:
LicenseException: This document type requires the 'Dicom' plugin license.یک پسوند که هیچ نمایشگری برای آن تعریف نشده باشد، خطای زیر را ایجاد میکند:
FormatNotSupportedException: Document format '<extension>' is not supported.پس از حلکننده، پیکربندی نهایی میشود: اگر شیء پیکربندی صریحی را پاس داده باشید، همان استفاده میشود؛ در غیر این صورت پیکربندی پیشفرض فرمت از فهرست گرفته میشود. DocOptions.Password برای اسناد محافظتشده به پیکربندی کپی میشود.
مرحله ۱b — حالت تغییر مسیر (DefaultRender = false)
اکثریت پیکربندیهای هر فرمت، پرچم DefaultRender را ارائه میدهند. این پرچم بین دو مسیر اساسی متفاوت انتخاب میکند:
DefaultRender = true— سند بهصورت بومی رندر میشود و مستقیماً به تصاویر صفحه تبدیل میگردد.DefaultRender = false— ابتدا سند بهصورت PDF در حافظه تبدیل میشود، موتور منبع آزاد میگردد و یک نمایشگر PDF کار را بر عهده میگیرد. PDF تولید شده متن واقعی را در خود جای میدهد، بنابراین جستجوی تمام‑متن با هایلایتهای بومی دقیق به‑پیکسل امکانپذیر میشود؛ خط لولهAllowSearchوAllowCopyرا برای PDF تغییر مسیر فعال میکند چون تبدیل برای کاربر نامرئی است.
XPS و پیشفرض فهرست برای MHT از مسیر تغییر مسیر استفاده میکنند. یک پروجکشن PDF میتواند جستجوی بومی برای فرمتهایی مانند HTML و Microsoft Project فراهم کند. اگر PDF حاصل شامل تصاویری بدون لایهٔ متنی باشد، نمایشگر استاندارد نمیتواند آن پیکسلها را جستجو کند.
از حالت تغییر مسیر زمانی استفاده کنید که به یک پروجکشن PDF حاوی متن نیاز دارید — با این هزینهٔ تبدیل اولیه هنگام باز کردن سند.
مرحله ۲ — خط لولهٔ تصویر‑صفحه
صفحات رندر شده برای هر درخواست از طریق یک توالی ثابت پردازش میشوند:
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response- Watermark — از وضعیت مجوز (عدم وجود مجوز، انقضای موقت یا اشتراک، دامنه نامعتبر، نسخهٔ نادرست) و از
DocOptions.Watermarkبرای متن سفارشی شما اعمال میشود. یک برنامه با مجوز صحیح — یا یک مجوز موقت فعال — که واترمارک سفارشی نداشته باشد، این مرحله را نادیده میگیرد. - Rotate/flip — وضعیت صفحهای که کاربر در ویجت تنظیم میکند (۹۰°/۱۸۰°/۲۷۰°، چرخش افقی/عمودی) در جلسه ذخیره میشود و در هر رندر بعدی آن صفحه اعمال میگردد.
- Scale — تصویرهای بندانگشتی و سطوح زوم با مقیاسبندی صفحه رندر شده به اندازهٔ هدف درخواستشده تولید میشوند؛
0به معنای ارائه به اندازهٔ اصلی است. - Annotation burn — حاشیهنویسیهای ذخیرهشده بر روی بیتمپ کشیده میشوند تا در خروجیها و تصاویر صفحه نشان داده شوند.
- Encoding — نتیجه بهصورت PNG با استفاده از استریمهای حافظهٔ مشترک رمزگذاری شده و مستقیماً به پاسخ HTTP نوشته میشود.
خطاهای داخل میدلویر بهصورت تصاویر خطای PNG (متن قرمز روی پسزمینهٔ سفید) بازگردانده میشوند نه بهصورت صفحات خطای HTTP، بهطوری که ویجت بتواند آنها را در ناحیهٔ صفحه نمایش دهد.
کشگذاری صفحه
BaseConfig.CachePages (پیشفرض true) تصاویر صفحهٔ رندر شده را در حافظه برای طول عمر جلسهٔ سند نگه میدارد، بنابراین بازدید مجدد از یک صفحه باعث رندر دوبارهٔ آن نمیشود. BaseConfig.ImageResolution (۲۵–۳۰۰ DPI، 0 = پیشفرض فرمت) اصلیترین تنظیم کیفیت/حافظه است؛ پیشفرض هر فرمت در صفحهٔ پیکربندی آن مستند شده است.
کجا چه تنظیمی انجام شود
| چه میخواهید | تنظیم |
|---|---|
| صفحات واضحتر | ImageResolution on the format config |
| جستجوی دقیق متن در HTML/EPUB/email/MHT/MPP | DefaultRender = false on the format config |
| حافظه کمتر برای اسناد بزرگ | CachePages = false, close sessions explicitly |
| مهر شخصی شما بر هر صفحه | DocOptions.Watermark |
آیا این صفحه مفید بود؟