ViewerConfig

Параметры клиентского виджета просмотра

ViewerConfig (namespace Doconut) описывает внешний вид и поведение браузерного просмотрщика. Он не влияет на качество рендеринга документа; для этого используйте конфигурацию формата. Класс C# и давно существующий JavaScript‑виджет имеют разные значения по умолчанию, поэтому явно сопоставляйте параметры.

Два изменения на клиенте в этом релизе тихо не работают. Функции‑обработчики передаются как параметры — виджет больше не выводит глобальные имена функций из id контейнера — и ResPath должен указывать на префикс ресурсов, а не на корень приложения. Оба оставляют сервер полностью работоспособным и ничего не выводят в консоль браузера. Если вы переносите страницу из предыдущей библиотеки, прочитайте Обратные вызовы и Контрольный список путей прежде чем что‑либо ещё.

Свойства C#

ТипСвойствоПо умолчаниюОписание
boolShowThumbstrueОтображать панель миниатюр.
boolAutoLoadfalseАвтоматически загружать после инициализации. Обычный поток токенов явно вызывает View(token).
boolAutoFocustrueПеремещать фокус/прокрутку браузера к просмотрщику во время инициализации.
boolAutoPageFocustrueСохранять текущую миниатюру видимой при смене страниц.
intPageZoom100Начальный процент масштабирования.
intZoomStep10Процент, добавляемый или удаляемый командами масштабирования.
intMaxZoom300Максимальный процент масштабирования.
boolShowToolTiptrueПоказывать подсказку с позицией страницы при прокрутке.
stringToolTipPageText"Page "Префикс, используемый в подсказке страницы.
boolCacheEnabledfalseСохранять скользящее окно изображений страниц в памяти браузера. Не использует localStorage.
boolLargeDocfalseДобавлять элементы страниц пакетами с задержкой для больших документов.
boolShowHyperlinksfalseОтображать наложения гиперссылок, когда серверная конфигурация их извлекла.
boolFixedZoomtrueИспользовать фиксированный процент масштабирования вместо адаптивного пересчёта.
intFixedZoomPercent100Фиксированный масштаб для настольных устройств.
intFixedZoomPercentMobile75Фиксированный масштаб для мобильных устройств.
stringBasePath"/"Куда просмотрщик отправляет запросы страниц. "/" — это DocImage.axd в корне сайта; иначе ветка, где хост сопоставляет UseDoconut(), без начального / ("doconut" означает /doconut/DocImage.axd).
stringResPath"doconut-res/images" (26.9.0; "doconut-res" before)Папка, из которой виджет загружает свои изображения: папка images внутри ResourcesPath, без начального /.
stringFitType"width""width", "height" или пусто для отключения автоматического подгонения. "page" не поддерживается текущим виджетом.
boolRetryOn409falseВключить опрос, когда асинхронное/распределённое создание страниц отвечает 202 Accepted; 409 также принимается для совместимости со старыми серверами. Не требуется для обычного синхронного просмотрщика.
csharp
var config = new ViewerConfig
{
    ShowThumbs = true,
    AutoLoad = false,
    PageZoom = 100,
    MaxZoom = 300,
    FitType = "width",
    BasePath = "doconut",           // без начального '/': просмотрщик добавляет его ("/doconut" превратится в //doconut, другой хост)
    ResPath = "doconut-res/images",
    ShowHyperlinks = true
};

Сопоставление C# и JavaScript

Не передавайте напрямую сериализованный объект ViewerConfig в docViewer(...). Большинство ключей виджета используют camelCase, тогда как три установленных ключа пути/подгонки записаны в PascalCase.

C#JavaScript
ShowThumbsshowThumbs
AutoLoadautoLoad
AutoFocusautoFocus
AutoPageFocusautoPageFocus
PageZoompageZoom
ZoomStepzoomStep
MaxZoommaxZoom
ShowToolTipshowToolTip
ToolTipPageTexttoolTipPageText
CacheEnabledcacheEnabled
LargeDoclargeDoc
ShowHyperlinksshowHyperlinks
FixedZoomfixedZoom
FixedZoomPercentfixedZoomPercent
FixedZoomPercentMobilefixedZoomPercentMobile
BasePathBasePath
ResPathResPath
FitTypeFitType
RetryOn409retryOn409

Значения по умолчанию JavaScript

Виджет имеет более старые значения по умолчанию, отличающиеся от класса C#. Следующие значения взяты из текущей реализации docViewer.js.

ОпцияЗначение по умолчаниюПримечания
leftMinWidth / leftMaxWidth220 / 800Границы ширины панели миниатюр.
showThumbstrueНачальная видимость миниатюр.
autoFocus / autoPageFocustrue / falseautoPageFocus отличается от значения по умолчанию в C#.
thumbWidth / thumbHeight / thumbPadding150 / 200 / 10Геометрия миниатюр в пикселях.
pageZoom / zoomStep / maxZoom100 / 10 / 200JavaScript maxZoom отличается от C# (300).
showToolTip / toolTipPageTexttrue / "Page "Всплывающая подсказка с номером страницы.
format / doc / AccessToken"" / 0 / ""Внутренние значения инициализации; обычно заполняются View(token).
debugModefalseДополнительная диагностика клиента.
FitType""Автоматическое масштабирование не применяется, если не указано.
BasePath"DocImage.axd"Историческое значение клиента, сохранённое для совместимости. Текущие хосты ASP.NET Core должны задавать его явно в ветке сопоставленного middleware.
ResPath""Устанавливается явно к пути встроенных изображений.
cacheEnabled / cacheCount / cacheDelayfalse / 3 / 3Окно и задержка предзагрузки страниц в памяти.
autoLoadfalseРекомендуется использовать явный поток токена.
largeDoctrueОтличается от значения по умолчанию в C#.
fixedZoomfalseОтличается от значения по умолчанию в C#.
fixedZoomPercent / fixedZoomPercentMobile100 / 50Мобильное значение отличается от C# (75).
showHyperlinkstrueТребует серверного извлечения для создания наложений.

Установите все важные для поведения значения вместо того, чтобы полагаться на любой набор значений по умолчанию:

html
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>

<script>
const objViewer = $('#div_ctlDoc').docViewer({
    showThumbs: true,
    autoLoad: false,
    autoFocus: true,
    autoPageFocus: true,
    pageZoom: 100,
    zoomStep: 10,
    maxZoom: 300,
    FitType: 'width',
    cacheEnabled: false,
    largeDoc: false,
    showHyperlinks: true,
    fixedZoom: true,
    fixedZoomPercent: 100,
    fixedZoomPercentMobile: 75,
    BasePath: 'doconut',
    ResPath: 'doconut-res/images',
    onViewerReady: function () {},
    onError: function (message) { console.error('DocViewer:', message); }
});
</script>

Обратные вызовы

Обратный вызовАргументыНазначение
onPageLoadingpageNumЗапрос страницы начинается.
onPageLoadedpageNumИзображение страницы завершило загрузку.
onThumbnailClickedpageNumПользователь выбрал миниатюру.
onPageClickedpageNumПользователь выбрал страницу.
onDoubleClicknoneПросмотрщик получил двойной клик.
onViewerBusynoneПросмотрщик перешёл в состояние занятости.
onViewerReadynoneИнициализация завершена.
onViewerErrornoneПросмотрщик перешёл в состояние ошибки.
onErrormessageОперация вернула сообщение об ошибке.
onCopydataДоступны данные копирования текста.
onAutoLoadStatuspageNumАвтозагрузка продвинулась до страницы.
onThumbsShownnoneПанель миниатюр стала видимой.
onAnnLoadednoneДанные аннотаций загружены.
onAnnSavednoneДанные аннотаций сохранены.
onAnnSaveErrornoneСохранение аннотаций не удалось.
onAnnClosednoneИнтерфейс аннотаций закрыт.

Сохраняйте обратные вызовы быстрыми; отправляйте телеметрию асинхронно и не блокируйте рендеринг страниц.

Каждый из этих параметров является опцией в объекте инициализации. Предыдущий просмотрщик искал глобальные функции, имена которых выводились из идентификатора контейнера — страница с <div id="div_ctlDoc"> должна была объявить function ctlDoc_OnViewerReady(). Этот поиск удалён. Передайте функцию явно:

javascript
objctlDoc = $('#div_ctlDoc').docViewer({
    // ... ваши существующие параметры ...
    onViewerBusy:     ctlDoc_OnViewerBusy,      // был найден по имени
    onViewerReady:    ctlDoc_OnViewerReady,     // был найден по имени
    onCopy:           ctlDoc_Copy,              // был ctlDoc_Copy(text)
    onAutoLoadStatus: ctlDoc_AutoLoadStatus     // был ctlDoc_AutoLoadStatus(page)
});

Старый поиск был обёрнут пустым catch, поэтому ничего не сообщалось. В этом выпуске функции просто не вызываются: типичный симптом — индикатор загрузки, который никогда не останавливается, потому что обработчик, скрывающий его, был onViewerReady. Документ за ним рендерится корректно.

Обратного вызова для клика по ссылке нет — обработка гиперссылок встроена и управляется showHyperlinks.

Публичные группы методов

ГруппаОбщие методы
Жизненный циклView(token, accessToken?), Close(server?), Token(), Init(), IsLoaded()
НавигацияGotoPage(page), ShowPage(page, focus?), Next(next), CurrentPage(), TotalPages()
Масштаб и подгонкаZoom(zoomIn), CurrentZoom(), FitType(value), Refit()
ОриентацияRotate(page, angle), Flip(page, flipType)
ЭскизыHideThumbs(hide), ThumbSize(size), ReloadThumbs(width), ScrollToThumb(thumb)
ПоискCanSearch(), Search(...), SearchMatchCount(), SearchSummary(...), GotoSearchMatch(...)
АннотацияSaveAnnotations(), GetAnnotations(), PushAnnotations(...), CloseAnnotations(...), ShowAnnotations(...)
КопированиеCopy(...), CopyPage(pageNumber), CopyMode(enabled)

JavaScript‑файл также содержит внутренние вспомогательные функции. Стабильными точками интеграции считаются только методы, используемые реальным UI и задокументированные здесь или в руководствах по функциям.

Повтор при рендеринге распределенной страницы

retryOn409 сохраняет своё историческое название. Он предназначен для асинхронного создания страниц и повторно отправляет текущий ответ готовности 202 Accepted, а также более старый сигнал 409 Conflict. При включении виджет опрашивает с этими JavaScript‑значениями по умолчанию:

ОпцияПо умолчанию
retryInitialDelayMs250
retryBackoffFactor1.6
retryMaxDelayMs2500
retryMaxAttempts60
retryMaxTotalMs120000

Оставьте его отключённым для обычного однопользовательского просмотрщика. Включение не может сделать неподдерживаемый синхронный рендер асинхронным.

Включайте его, когда страницы обслуживаются из общего хранилища с FirstPagePriority, где последующие страницы действительно отвечают 202 Accepted, пока не будут записаны. Клиент, который не повторяет запросы, показывает повреждённые плитки для страниц, ещё находящихся в процессе рендеринга — см. Распределённые развертывания.

Список проверок пути

  • DoconutOptions.MiddlewarePath должен описывать ветку, которую вы действительно маппите.
  • BasePath должен указывать на эту ветку, записанную без начального / ('doconut', а не '/doconut': просмотрщик добавляет слеш, а //doconut/... — запрос к другому хосту). В справочном приложении сохраняется историческая форма запроса DocImage.axd на ветке MapWhen, поэтому задаётся BasePath: '/'.
  • DoconutOptions.ResourcesPath — это маршрут встроенных ресурсов.
  • ResPath обычно указывает на подпапку images без начального / — 'doconut-res/images' с префиксом по умолчанию. Пустой ResPath был корректен в предыдущей библиотеке, где ресурсы брались из корня приложения; здесь это некорректно и приводит к сбою без сообщения об ошибке.
  • ExtractHyperlinks должен быть включён в конфигурации формата сервера, прежде чем showHyperlinks сможет что‑то отобразить.

Была ли эта страница полезной?