Просмотрщик
Основной класс просмотрщика документов
Viewer (namespace Doconut) — публичная точка входа для открытия документов из страниц Razor, контроллеров MVC, компонентов Blazor или минимальных API. Он sealed, зарегистрирован как transient сервис через AddDoconut() и разрешается через внедрение в конструктор — никогда не создавайте его вручную.
Viewer не хранит состояние запроса и намеренно не реализует IDisposable: сеансы документов живут независимо в кэше сеансов, поэтому освобождение сервиса никогда не может закрыть открытый документ (см. Основные концепции → Как работает Viewer).
OpenDocumentAsync
Открывает документ и возвращает токен сеанса, который клиентский виджет использует для всех последующих запросов.
| Перегрузка | Когда использовать |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Открытие с диска с автоматическим определением формата и конфигурацией по умолчанию для формата |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Необходимы параметры рендеринга для каждого формата (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Документ не является файлом на диске (загрузка, база данных, blob). fileInfo должен содержать правильное расширение — оно определяет формат |
// Simple open
string token = await viewer.OpenDocumentAsync(path);
// With per-format config and options
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// From an upload
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));Исключения, которые следует обрабатывать:
LicenseException— найденная лицензия отклонена (сообщение содержит причину отклонения) или формат требует возможности плагина, которая больше не предоставлена. Истечение срока действия календаря без сообщения об отклонении приводит к рендерингу с водяным знаком вместо выброса исключения.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— содержимое файла повреждено или не соответствует его расширению.
CloseDocument
void CloseDocument(string token)Удаляет сеанс из кэша (немедленно освобождая движок документа), удаляет маркер безопасности и отзывает предоставление доступа. Необязательно — скользящее истечение времени выполняет ту же очистку, но рекомендуется для больших документов.
GetPageCount
int GetPageCount(string token)Общее количество страниц открытого сеанса. Выбрасывает исключение, если токен неизвестен или истёк.
DocOptions
Параметры, независимые от формата, задаваемые при открытии (namespace Doconut):
| Тип | Свойство | Значение по умолчанию | Описание |
|---|---|---|---|
string | Password | "" | Пароль для защищённых документов (автоматически копируется в конфигурацию формата). |
int | ImageResolution | 0 | Устарело. Сохраняется только для совместимости — вместо этого задавайте ImageResolution в конфигурации формата. |
string | Watermark | "" | Пользовательский текст водяного знака, отображаемый на отрисованных страницах. Формат строки: \"^Text~Color~FontSize~FontName~Opacity~Angle\", например \"^Sample Copy~Red~24~Verdana~80~-45\". |
int | TimeOut | 60 | Скользящее истечение сеанса в минутах. |
bool | IsSecured | true | В настоящее время не применяется — зарезервировано. Привязка токена контролируется глобально параметром DoconutOptions.UnsafeMode (см. Основные концепции → Сеансы и безопасность). |
| Тип | Свойство | Значение по умолчанию | Описание |
|---|---|---|---|
bool | IsWebFarm | false | Помечает операцию открытия как сценарий web‑farm. Использовать только с соответствующей архитектурой общего хранилища/сеанса. |
string | WebFarmPath | "" | Общий путь, используемый в специализированном рабочем процессе web‑farm. Пусто в обычном однопользовательском просмотрщике. |
bool | EditMode | false | Зарезервировано для отдельного рабочего процесса Editor; оставьте false для стандартного просмотрщика. |
Custom watermark
DocOptions.Watermark использует шесть полей, разделённых тильдами. Необязательный начальный символ ^ запрашивает размещение по всем углам:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Поле | Пример | Значение |
|---|---|---|
Начальный ^ | ^ | Необязательное размещение по всем углам. Без него используется обычное размещение водяного знака. |
| Text | Confidential | Текст, отображаемый на каждой странице. Не должен быть пустым. |
| Color | Red | Именованный цвет, понятный слою рисования. |
| FontSize | 24 | Размер шрифта; некорректный числовой ввод приводит к использованию значения по умолчанию рендерера. |
| FontName | Verdana | Запрашиваемое семейство шрифтов. Убедитесь, что оно установлено в среде развертывания. |
| Opacity | 80 | Значение байта от 0 до 255. Должно успешно парситься. |
| Angle | -45 | Угол вращения в градусах; некорректный числовой ввод приводит к использованию значения по умолчанию. |
Парсер ожидает ровно шесть полей после необязательного ^. Неверное определение заменяется видимым запасным вариантом SDK Invalid Watermark вместо тихого исчезновения.
Решение по лицензии
| Состояние лицензии | Пользовательское значение предоставлено | Отображаемый результат |
|---|---|---|
| Действительная платная лицензия просмотрщика | Нет | Чистая страница |
| Действительная платная лицензия просмотрщика | Да | Пользовательский водяной знак |
| Активный временный/демо базовый просмотрщик | Нет | Чистая страница базового просмотрщика |
| Активный временный/демо базовый просмотрщик | Да | Пользовательский водяной знак, когда применяется путь чистого базового просмотрщика |
| Отсутствующая, отклонённая, просроченная, неверной версии или с недействительным доменом лицензия | Любое | Водяной знак принудительного/оценочного режима; пользовательское значение не переопределяет его |
| Рендеринг плагина по правилам оценки | Любое | Оценочный водяной знак |
То же решение применяется к обслуживаемым изображениям страниц и экспортам аннотаций. Вывод анимированного GIF наносит водяной знак кадр за кадром. Пользовательский водяной знак, следовательно, является функцией, доступной по лицензии, а не способом заменить или подавить оценочный водяной знак.
API аннотаций
Загрузка и экспорт аннотаций на стороне сервера. Полный пошаговый гид находится в Руководства → Аннотации; интерфейс выглядит так:
| Элемент | Назначение |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Менеджер, привязанный к размерам страниц открытого сеанса |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Менеджер с явно указанными размерами страниц |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Менеджер, не зависящий от сеанса |
void LoadAnnotationData(string token, AnnotationManager manager) | Загружает аннотации, созданные в C#, в сеанс |
void LoadAnnotationData(string token, string annotationData) | Загружает аннотации из закодированного page/Base64 конверта, возвращаемого AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Загружает аннотации из XML |
XmlDocument GetAnnotationXML(string token) | Экспортирует аннотации сеанса в виде XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF с вшитыми аннотациями |
Task<int> ExportAnnotationsToPngAsync(…) | PNG‑файлы с вшитыми аннотациями |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP‑архив PNG‑файлов по страницам с вшитыми аннотациями |
Метаданные DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Возвращает метаданные DICOM‑тегов для сеансов, открытых через плагин DICOM; null для недICOM‑документов.
Вспомогательные ресурсы — ReferenceCss / ReferenceScripts
Генерирует теги <link>/<script> для встроенных ресурсов, обслуживаемых UseDoconutResources(), в правильном порядке зависимостей. Пакеты для функций, ограниченных лицензией, таких как поиск и аннотации, генерируются только когда лицензия их разрешает, поддерживая согласованность UI клиента с поведением сервера.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Флаги CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (ограничено поиском), IncludeAnnotationCss (ограничено аннотациями).
Флаги ScriptConfig: IncludeJQuery (требуется всеми остальными), IncludeBootstrap, IncludeViewerScripts (ядро: docViewer.js + splitter + links), IncludeSearchScripts и IncludeSearchBar (ограничено поиском), IncludeAnnotationScripts и IncludeAnnotationBar (ограничено аннотациями).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Была ли эта страница полезной?