Переглядач
Головний клас переглядача документів
Viewer (namespace Doconut) — це публічна точка входу для відкриття документів з Razor‑сторінок, MVC‑контролерів, Blazor‑компонентів або мінімальних API. Він запечатаний, зареєстрований як транзієнтна служба за допомогою AddDoconut(), і отримується через ін’єкцію в конструктор — ніколи не створюйте його безпосередньо.
Viewer не зберігає стану на запит і навмисно не реалізує IDisposable: сеанси документів живуть незалежно в кеші сеансів, тому звільнення служби ніколи не може закрити відкритий документ (див. Основні концепції → Як працює переглядач).
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 | Позначає операцію відкриття як сценарій веб‑ферми. Використовуйте лише з відповідною архітектурою спільного сховища/сеансу. |
string | WebFarmPath | "" | Спільний шлях, що використовується у спеціалізованому робочому процесі веб‑ферми. Порожній у звичайному однохостовому переглядачі. |
bool | EditMode | false | Зарезервовано для окремо розповсюджуваного робочого процесу Editor; залишайте false для стандартного переглядача. |
Користувацький водяний знак
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) | Завантажити анотації з закодованого envelope 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 клієнта з поведінкою сервера.
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Чи була ця сторінка корисною?