Конвеєр рендерингу

Від документа до зображень сторінок

Між OpenDocumentAsync і PNG, який потрапляє в браузер, існує два окремих етапи: розв’язання переглядача (який движок завантажує документ, визначається один раз при відкритті) і обробка сторінки (що відбувається з кожним зображенням сторінки при кожному запиті до DocImage.axd). Знання обох пояснює, чому формат рендериться так, як він рендериться — і що насправді перемикає DefaultRender.

Етап 1 — Визначення переглядача формату

Фабрика зіставляє розширення файлу з переглядачем через каталог форматів, з трьома рівнями пріоритету:

  1. Спочатку користувацькі переглядачі. Все, що ви зареєстрували за допомогою DoconutOptions.RegisterViewer(extension, factory, defaultConfig?), переважає над будь‑яким вбудованим.
  2. Вбудовані переглядачі сімейства. Каталог зіставляє кожне розширення, що підтримується, з сімейством переглядачів — Word, Excel, PowerPoint, Pdf, Cad, Dgn, Image, Tiff, Psd, Email, Visio, Project, Xps, Epub, Txt, Html, Mht, Dcn — кожне має свій адаптер движка. Якщо ліцензований плагін додає переглядач для того ж розширення, переглядач плагіна замінює вбудований.
  3. Формати лише з плагінами. Деякі розширення зовсім не мають вбудованого переглядача — DICOM (.dcm, .ima) існує лише через плагін DICOM. Спроба відкрити його без необхідної можливості викликає:
text
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 виконує фіксовану послідовність:

text
raw page PNG → watermark → rotate/flip → scale → annotation burn → PNG to the response
  • Водяний знак — застосовується згідно стану ліцензії (відсутня ліцензія, прострочена тимчасова або підписна ліцензія, недійсний домен, збірка поза версіями ліцензії) та з DocOptions.Watermark для вашого власного тексту. Ліцензований сайт без користувацького водяного знака пропускає цей крок.
  • Поворот/віддзеркалення — стан сторінки, який користувач встановлює у віджеті (90°/180°/270°, горизонтальне та вертикальне віддзеркалення), зберігається у сесії та застосовується до кожного наступного рендеру цієї сторінки.
  • Масштаб — мініатюри та рівні збільшення створюються шляхом масштабування відрендереної сторінки до запрошеного розміру.
  • Накладання анотацій — збережені анотації малюються на бітовому образі, тому експорти та зображення сторінок їх відображають.
  • Кодування — результат кодується у PNG і записується безпосередньо у відповідь.

Помилки всередині обробника повертаються як PNG‑зображення помилок (червоний текст на білому) зі статусом 200, а не як HTTP‑сторінки помилок, щоб віджет міг відображати їх у області сторінки.

Кешування сторінок

BaseConfig.CachePages (за замовчуванням true) зберігає відрендерені зображення сторінок у пам’яті протягом всього часу сесії документа, тому повторне відкриття сторінки не виконує повторний рендер. BaseConfig.ImageResolution (25–300 DPI, 0 = типове для формату) — головний параметр якості та пам’яті; типове значення для кожного формату наведено у Format Configs.

На одному вузлі сесії та кешовані сторінки живуть у пам’яті процесу‑робітника. Перезапуск пулу застосунків — запланований або викликаний зміною Web.config чи тайм‑аутом бездіяльності — знищує всі відкриті сесії документів, і віджет тоді показує Document session not found. Please re-open document. У розподіленому режимі (див. Sessions & Security) сесія відновлюється зі спільного сховища.

Де налаштовувати що

Що ви хочетеНалаштування
Чіткіші сторінкиImageResolution у конфігурації формату
Точний текстовий пошук у HTML, EPUB, email, MHT або MPPDefaultRender = false у конфігурації формату
Менше пам’яті для великих документівCachePages = false, і явно закривати сесії
Ваш власний штамп на кожній сторінціDocOptions.Watermark

Чи була ця сторінка корисною?