ViewerConfig
Параметры клиентского виджета просмотрщика
ViewerConfig (namespace Doconut) описывает внешний вид и поведение браузерного просмотрщика. Он не влияет на качество рендеринга документа; для этого используйте конфигурацию формата. Класс C# и давно существующий JavaScript‑виджет имеют разные значения по умолчанию, поэтому сопоставляйте параметры явно.
Два изменения на клиенте в этом выпуске завершаются без ошибок. Функции‑обработчики передаются как параметры — виджет больше не выводит имена глобальных функций из идентификатора контейнера — и
ResPathдолжен указывать на префикс ресурсов, а не на корень приложения. Оба оставляют сервер работать корректно и ничего не выводят в консоль браузера. Если вы переносите страницу из предыдущей библиотеки, ознакомьтесь с Обратными вызовами и Контрольным списком путей прежде чем что‑либо ещё.
Свойства C#
| Тип | Свойство | По умолчанию | Описание |
|---|---|---|---|
bool | ShowThumbs | true | Показывать панель миниатюр. |
bool | AutoLoad | false | Автоматически загружать после инициализации. Обычный поток токенов явно вызывает View(token). |
bool | AutoFocus | true | Перемещать фокус/прокрутку браузера к просмотрщику во время инициализации. |
bool | AutoPageFocus | true | Держать текущую миниатюру видимой при смене страниц. |
int | PageZoom | 100 | Начальный процент масштабирования. |
int | ZoomStep | 10 | Процент, добавляемый или убираемый командами масштабирования. |
int | MaxZoom | 300 | Максимальный процент масштабирования. |
bool | ShowToolTip | true | Показывать подсказку с позицией страницы при прокрутке. |
string | ToolTipPageText | "Page " | Префикс, используемый в подсказке страницы. |
bool | CacheEnabled | false | Сохранять движущееся окно изображений страниц в памяти браузера. Не использует localStorage. |
bool | LargeDoc | false | Добавлять элементы страниц пакетами с задержкой для больших документов. |
bool | ShowHyperlinks | false | Отображать наложения гиперссылок, если серверная конфигурация их извлекла. |
bool | FixedZoom | true | Использовать фиксированный процент масштабирования вместо адаптивного пересчёта. |
int | FixedZoomPercent | 100 | Фиксированный масштаб для настольных устройств. |
int | FixedZoomPercentMobile | 75 | Фиксированный масштаб для мобильных устройств. |
string | BasePath | "/" | Ветка, где хост сопоставляет UseDoconut(). |
string | ResPath | "doconut-res" | Базовый путь к ресурсам, используемый виджетом. В обычной настройке указывает на <ResourcesPath>/images. |
string | FitType | "width" | "width", "height" или пусто — без автоматической подгонки. "page" не поддерживается текущим виджетом. |
bool | RetryOn409 | false | Включить опрос, когда асинхронное/распределённое создание страниц отвечает 202 Accepted; 409 также принимается для совместимости со старыми серверами. Не требуется обычному синхронному просмотрщику. |
var config = new ViewerConfig
{
ShowThumbs = true,
AutoLoad = false,
PageZoom = 100,
MaxZoom = 300,
FitType = "width",
BasePath = "/doconut",
ResPath = "/doconut-res/images",
ShowHyperlinks = true
};Сопоставление C# → JavaScript
Не передавайте напрямую сериализованный ViewerConfig в docViewer(...). Большинство ключей виджета записаны в camelCase, тогда как три установленных ключа пути/подгонки — в PascalCase.
| C# | JavaScript |
|---|---|
ShowThumbs | showThumbs |
AutoLoad | autoLoad |
AutoFocus | autoFocus |
AutoPageFocus | autoPageFocus |
PageZoom | pageZoom |
ZoomStep | zoomStep |
MaxZoom | maxZoom |
ShowToolTip | showToolTip |
ToolTipPageText | toolTipPageText |
CacheEnabled | cacheEnabled |
LargeDoc | largeDoc |
ShowHyperlinks | showHyperlinks |
FixedZoom | fixedZoom |
FixedZoomPercent | fixedZoomPercent |
FixedZoomPercentMobile | fixedZoomPercentMobile |
BasePath | BasePath |
ResPath | ResPath |
FitType | FitType |
RetryOn409 | retryOn409 |
Значения по умолчанию в JavaScript
У виджета более старые значения по умолчанию, отличающиеся от класса C#. Ниже перечислены текущие значения из реализации docViewer.js.
| Параметр | По умолчанию | Примечания |
|---|---|---|
leftMinWidth / leftMaxWidth | 220 / 800 | Границы ширины панели миниатюр. |
showThumbs | true | Начальная видимость миниатюр. |
autoFocus / autoPageFocus | true / false | autoPageFocus отличается от значения по умолчанию в C#. |
thumbWidth / thumbHeight / thumbPadding | 150 / 200 / 10 | Геометрия миниатюр в пикселях. |
pageZoom / zoomStep / maxZoom | 100 / 10 / 200 | maxZoom в JavaScript отличается от C# (300). |
showToolTip / toolTipPageText | true / "Page " | Подсказка с позицией страницы. |
format / doc / AccessToken | "" / 0 / "" | Внутренние значения инициализации; обычно заполняются View(token). |
debugMode | false | Дополнительная диагностика на клиенте. |
FitType | "" | Автоматическая подгонка отключена, если не указана. |
BasePath | "DocImage.axd" | Историческое значение клиента, сохранённое для совместимости. Современные хосты ASP.NET Core должны явно задать ветку сопоставленного middleware. |
ResPath | "" | Необходимо явно указать путь к встроенным изображениям. |
cacheEnabled / cacheCount / cacheDelay | false / 3 / 3 | Окно предзагрузки страниц в памяти и задержка. |
autoLoad | false | Рекомендуется явный поток токенов. |
largeDoc | true | Отличается от значения по умолчанию в C#. |
fixedZoom | false | Отличается от значения по умолчанию в C#. |
fixedZoomPercent / fixedZoomPercentMobile | 100 / 50 | Мобильное значение отличается от C# (75). |
showHyperlinks | true | Требует серверного извлечения гиперссылок для отображения наложений. |
Устанавливайте все важные параметры явно, а не полагайтесь на любые наборы значений по умолчанию:
<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>Обратные вызовы
| Обратный вызов | Аргументы | Назначение |
|---|---|---|
onPageLoading | pageNum | Запрос страницы начинается. |
onPageLoaded | pageNum | Изображение страницы завершило загрузку. |
onThumbnailClicked | pageNum | Пользователь выбрал миниатюру. |
onPageClicked | pageNum | Пользователь выбрал страницу. |
onDoubleClick | none | В виджете зафиксировано двойное щелчок. |
onViewerBusy | none | Виджет перешёл в состояние занятости. |
onViewerReady | none | Инициализация завершена. |
onViewerError | none | Виджет перешёл в состояние ошибки. |
onError | message | Операция вернула сообщение об ошибке. |
onCopy | data | Доступны данные копирования текста. |
onAutoLoadStatus | pageNum | Автозагрузка продвинулась до указанной страницы. |
onThumbsShown | none | Панель миниатюр стала видимой. |
onAnnLoaded | none | Данные аннотаций загружены. |
onAnnSaved | none | Данные аннотаций сохранены. |
onAnnSaveError | none | Сохранение аннотаций завершилось ошибкой. |
onAnnClosed | none | UI аннотаций закрыт. |
Держите обратные вызовы быстрыми; отправляйте телеметрию асинхронно и не блокируйте рендеринг страниц.
Каждый из этих параметров является опцией в объекте инициализации. В прежнем просмотрщике функции искались глобально по имени, сформированному из идентификатора контейнера — страница с
<div id="div_ctlDoc"> требовала объявить function ctlDoc_OnViewerReady(). Этот поиск удалён. Передавайте функцию явно:
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 также содержит внутренние вспомогательные функции. Считайте стабильными только те методы, которые задокументированы в этом справочнике или в руководствах по функциям.
Повторные попытки, пока распределённая страница ещё рендерится
retryOn409 сохраняет своё историческое название. Он предназначен для асинхронного создания страниц и
повторяет текущий ответ готовности 202 Accepted, а также более старый сигнал 409 Conflict. При включении виджет опрашивает с этими значениями по умолчанию в JavaScript:
| Параметр | По умолчанию |
|---|---|
retryInitialDelayMs | 250 |
retryBackoffFactor | 1.6 |
retryMaxDelayMs | 2500 |
retryMaxAttempts | 60 |
retryMaxTotalMs | 120000 |
Оставьте отключённым для обычного одноузлового просмотрщика. Включение не сделает синхронный рендер асинхронным.
Включайте, когда страницы обслуживаются из общего хранилища с FirstPagePriority, где последующие
страницы действительно отвечают 202 Accepted, пока не будут записаны. Клиент, который не повторяет запросы, покажет повреждённые плитки для ещё рендерящихся страниц — см. Распределённые развертывания.
Контрольный список путей
DoconutOptions.MiddlewarePathдолжен описывать ветку, которую вы действительно маппите.BasePathдолжен указывать на эту ветку. В справочном приложении сохраняется историческая форма запросаDocImage.axdна веткеMapWhen, поэтомуBasePath: '/'.DoconutOptions.ResourcesPath— это маршрут к встроенным ресурсам.ResPathобычно указывает на подпапку/images—'doconut-res/images'с префиксом по умолчанию. ПустойResPathбыл корректен в предыдущей библиотеке, где ресурсы брались из корня приложения; здесь это неверно и приводит к ошибке без сообщения.ExtractHyperlinksдолжен быть включён в конфигурации формата сервера, прежде чемshowHyperlinksсможет что‑то отобразить.
Была ли эта страница полезной?