צינור רינדור
מתוך מסמך לתמונות דפים
בין OpenDocumentAsync ל‑PNG שמגיע לדפדפן יש שני שלבים מובחנים: פתרון הצופה (איזה מנוע טוען את המסמך, נקבע פעם אחת לכל פתיחה) ועיבוד דף (מה קורה לכל תמונת דף בכל בקשה). הידיעה על שני השניים מסבירה מדוע פורמט מציג את עצמו כך — ומה 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 — שלכל אחת יש מתאם מנוע משלה. אם תוסף מורשה תורם צופה לאותה סיומת, צופה התוסף מחליף את הצופה המובנה.
AddDoconut()מאמת רשיונות תוספים רשומים בעת ההפעלה; fallback של המפעל לצופה המובנה הוא כלל ריצה מגן. - פורמטים של תוסף בלבד. חלק מהסיומות אין להן צופה מובנה כלל — DICOM (
.dcm) קיים רק דרך תוסף DICOM. פתיחה של קובץ כזה ללא היכולת הנדרשת זורקת:
LicenseException: This document type requires the 'Dicom' plugin license.הקצאת סיומת ללא צופה מעלה:
FormatNotSupportedException: Document format '<extension>' is not supported.לאחר הפתרון, ההגדרה מתייצבת: אובייקט ההגדרה המפורש שלך אם העברת אחד, אחרת ההגדרה ברירת‑המחדל של הפורמט מהקטלוג. DocOptions.Password מועתק לתוך ההגדרה עבור מסמכים מוגנים.
שלב 1ב — מצב הפנייה (DefaultRender = false)
רוב ההגדרות לכל פורמט חושפות דגל DefaultRender. הוא בוחר בין שני מסלולים שונים באופן יסודי:
DefaultRender = true— המסמך מציג באופן מקורי, ישר לתמונות דפים.DefaultRender = false— המסמך קודם מומר ל‑PDF בזיכרון, מנוע המקור משוחרר, וצופה PDF לוקח את ההובלה. ה‑PDF שנוצר משלב טקסט אמיתי, כך שחיפוש מלא‑טקסט מקבל הדגשות מדויקות בפיקסלים; הצינור מכפהAllowSearchו‑AllowCopyעל ה‑PDF המופנה מכיוון שההמרה בלתי נראית למשתמש.
XPS והקונפיגורציה של הקטלוג עבור MHT משתמשים במסלול ההפנייה. פרויקט PDF יכול לספק חיפוש מקורי עבור פורמטים כגון HTML ו‑Microsoft Project. אם ה‑PDF המתקבל מכיל תמונות ללא שכבת טקסט, הצופה הסטנדרטי אינו יכול לחפש את הפיקסלים האלו.
השתמש במצב הפנייה כשאתה צריך פרויקט PDF נושא טקסט — על חשבון המרה מוקדמת כאשר המסמך נפתח.
שלב 2 — צינור תמונת‑דף
דפים שעברו רינדור מעובדים לפי בקשה ברצף קבוע:
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response- Watermark — מוחל ממצב הרישיון (רישיון חסר, רישיון זמני פג תוקף או מנוי, תחום לא תקין, גרסה שגויה) ומ‑
DocOptions.Watermarkעבור הטקסט המותאם שלך. אפליקציה עם רישיון תקין — או רישיון זמני פעיל — ללא סימן מים מותאם מדלגת על שלב זה. - Rotate/flip — מצב לכל דף שהמשתמש מגדיר בווידג׳ט (90°/180°/270°, הפיכות אופקיות/אנכיות) נשמר במושב ומיושם בכל רינדור נוסף של אותו דף.
- Scale — תמונות ממוזערות ורמות זום נוצרות על‑ידי שינוי גודל הדף המורנדר לגודל היעד המבוקש;
0משמעותו שירות בגודל המקורי. - Annotation burn — ההערות השמורות מצוירות על הביטמפה כך שייצוא ותמונות דפים יציגו אותן.
- Encoding — התוצאה מקודדת ל‑PNG באמצעות זרמי זיכרון משותפים ונכתבת ישירות לתגובה של HTTP.
שגיאות בתוך ה‑middleware מוחזרות כתמונות שגיאת PNG (טקסט אדום על לבן) במקום דפי שגיאת HTTP, כך שהווידג׳ט יכול להציג אותן באזור הדף.
קאשינג של דפים
BaseConfig.CachePages (ברירת‑המחדל true) שומר תמונות דפים מרונדרות בזיכרון לכל משך חיי מושב המסמך, כך שביקור חוזר בדף לא גורם לרינדור מחדש. BaseConfig.ImageResolution (25–300 DPI, 0 = ברירת‑המחדל של הפורמט) הוא המדד המרכזי לאיכות/זיכרון; ברירת‑המחדל של כל פורמט מתועדת בעמוד ההגדרה שלו.
DocOptions.ImageResolution הוא מיושן ואינו שולט באיכות הרינדור. אם אתה
מעביר יישום מהספרייה הקודמת, העבר ערך זה אל הגדרת הפורמט — המהדר יצביע על כל מקום קריאה.
רינדור על צומת אחד מול רבים
הכל למעלה מתאר רינדור על‑ביקוש בצומת יחיד עבור המושב שפתח את המסמך. פריסה שבה צומת אחד מרנדר ומפרסם את כל סט הארטיפקטים, וצמתים אחרים משרתים את הדפים מאחסון משותף, משתמשת בנתיב קריאה שונה — ראה Distributed Deployments.
היכן לכוונן מה
| מה אתה רוצה | לכוונן |
|---|---|
| דפים חדים יותר | ImageResolution על הגדרת הפורמט |
| חיפוש טקסט מדויק ב‑HTML/EPUB/דוא״ל/MHT/MPP | DefaultRender = false על הגדרת הפורמט |
| זיכרון נמוך יותר במסמכים גדולים | CachePages = false, סגור מושבים במפורש |
| חותמת אישית על כל דף | DocOptions.Watermark |
האם דף זה היה מועיל?