خط لوله رندرینگ
از سند به تصاویر صفحه
بین OpenDocumentAsync و PNGی که به مرورگر میرسد دو مرحلهٔ متمایز وجود دارد: رزولوشن نمایشگر (که موتور سند را بارگذاری میکند و یکبار برای هر باز کردن تصمیمگیری میشود) و پردازش صفحه (آنچه برای هر تصویر صفحه در هر درخواست به DocImage.axd رخ میدهد). دانستن هر دو سبب میشود بفهمید چرا یک فرمت بهآن شکل رندر میشود — و DefaultRender واقعاً چه کاری انجام میدهد.
مرحله 1 — حل نمایشگر فرمت
کارخانهٔ ساز، پسوند فایل را از طریق فهرست فرمتها به یک نمایشگر نگاشت میکند؛ این کار در سه سطح اولویت انجام میشود:
- نمایشگرهای سفارشی اولویت دارند. هر چیزی که با
DoconutOptions.RegisterViewer(extension, factory, defaultConfig?)ثبت کردهاید، بر تمام نمایشگرهای داخلی برتری دارد. - نمایشگرهای خانوادهٔ داخلی. فهرست هر پسوند قابل نمایش را به یک خانوادهٔ نمایشگر — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — نگاشت میکند؛ هر کدام دارای آداپتور موتور خود هستند. اگر یک افزونهٔ دارای لایسنس، نمایشگری برای همان پسوند فراهم کند، نمایشگر افزونه جایگزین نمایشگر داخلی میشود.
- فرمتهای فقط‑افزونهای. برخی پسوندها اصلاً نمایشگر داخلی ندارند — DICOM (
.dcm,.ima) فقط از طریق افزونهٔ DICOM موجود است. باز کردن یک فایل بدون قابلیت مورد نیاز خطای زیر را میاندازد:
LicenseException: This document type requires the 'Dicom' plugin license.پسوندی که هیچ نمایشگری برای آن تعریف نشده باشد، FormatNotSupportedException را برمیانگیزد.
پس از حل، پیکربندی نهایی میشود: شیء پیکربندی صریح شما اگر پاس دادهاید، در غیر این صورت پیکربندی پیشفرض فرمت از فهرست گرفته میشود. DocOptions.Password برای اسناد محافظتشده به پیکربندی کپی میشود.
مرحله 1b — حالت تغییر مسیر (DefaultRender = false)
اکثر پیکربندیهای هر فرمت، پرچم DefaultRender را در اختیار میگذارند. این پرچم بین دو مسیر اساسی انتخاب میکند:
DefaultRender = true— سند بهصورت بومی رندر میشود و مستقیماً به تصاویر صفحه تبدیل میگردد.DefaultRender = false— ابتدا سند به PDF در حافظه تبدیل میشود، موتور منبع آزاد میشود و یک نمایشگر PDF ادامه میدهد. PDF تولیدشده متن واقعی دارد، بنابراین جستجوی متنی کامل میتواند هایلایتهای بومی دقیق را ارائه دهد؛ خط لولهAllowSearchوAllowCopyرا برای PDF تغییر مسیر فعال میکند، چون تبدیل برای کاربر نامرئی است.
بهطور پیشفرض XPS و MHT از مسیر تغییر مسیر استفاده میکنند. یک پروجکشن PDF جستجوی بومی را برای فرمتهایی مانند HTML و Microsoft Project فراهم میکند. اگر PDF حاوی تصاویری بدون لایهٔ متنی باشد، آن پیکسلها قابل جستجو نیستند.
زمانی که به یک پروجکشن متنی قابل جستجو نیاز دارید، حالت تغییر مسیر را به کار ببرید — با این هزینهٔ تبدیل اولیه هنگام باز کردن سند.
مرحله 2 — خط لوله تصویر‑صفحه
هر درخواست صفحه به DocImage.axd توالی ثابت زیر را اجرا میکند:
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response- Watermark — بر پایهٔ وضعیت لایسنس (بدون لایسنس، لایسنس موقت منقضیشده یا اشتراک، دامنه نامعتبر، ساخت خارج از نسخههای لایسنس) و از
DocOptions.Watermarkبرای متن دلخواه شما اعمال میشود. یک سایت دارای لایسنس که واترمارک سفارشی نداشته باشد، این مرحله را نادیده میگیرد. - Rotate/flip — وضعیت هر صفحه که کاربر در ویجت تنظیم میکند (90°/180°/270°، وارونگی افقی و عمودی) در جلسه ذخیره میشود و بر هر رندر بعدی آن صفحه اعمال میگردد.
- Scale — تصویرهای بندانگشتی و سطوح زوم با مقیاسبندی صفحهٔ رندرشده به اندازهٔ درخواستشده تولید میشوند.
- Annotation burn — حاشیهنویسیهای ذخیرهشده روی بیتمپ کشیده میشوند، بنابراین خروجیها و تصاویر صفحه آنها را نشان میدهند.
- Encoding — نتیجه بهصورت PNG رمزگذاری شده و مستقیماً به پاسخ نوشته میشود.
خطاهای داخل هندلر بهصورت تصاویر خطای PNG (متن قرمز روی سفید) با وضعیت 200 برگردانده میشوند، نه بهصورت صفحات خطای HTTP، تا ویجت بتواند آنها را در ناحیهٔ صفحه نمایش دهد.
کشکردن صفحات
BaseConfig.CachePages (پیشفرض true) تصاویر صفحهٔ رندرشده را در حافظه برای طول عمر جلسهٔ سند نگه میدارد، بنابراین بازدید دوباره از یک صفحه باعث رندر مجدد نمیشود. BaseConfig.ImageResolution (۲۵–۳۰۰ DPI، 0 = پیشفرض فرمت) اصلیترین تنظیم کیفیت و مصرف حافظه است؛ پیشفرض هر فرمت در Format Configs فهرست شده است.
در یک گرهٔ واحد، جلسات و صفحات کششده در حافظهٔ فرآیند کارگر زندگی میکنند. یک بازیابی استخر برنامه — زمانبندیشده یا ناشی از ویرایش Web.config یا زمانسنج بیکاری — تمام جلسات سند باز را حذف میکند و ویجت سپس پیام Document session not found. Please re-open document. را نشان میدهد. در حالت توزیعشده (نگاه کنید به Sessions & Security)، جلسه از ذخیرهساز مشترک بازسازی میشود.
کجا چه تنظیمی انجام شود
| شما چه میخواهید | تنظیم کنید |
|---|---|
| صفحات واضحتر | ImageResolution در پیکربندی فرمت |
| جستجوی متنی دقیق در HTML، EPUB، ایمیل، MHT یا MPP | DefaultRender = false در پیکربندی فرمت |
| مصرف حافظه کمتر در اسناد بزرگ | CachePages = false و بسته شدن صریح جلسات |
| مهر دلخواه شما بر هر صفحه | DocOptions.Watermark |
آیا این صفحه مفید بود؟