Переглядач
Головний клас переглядача документів
Viewer (простір імен Doconut) є публічною точкою входу для відкриття документів з Razor‑сторінок, MVC‑контролерів, Blazor‑компонентів або мінімальних API. Він sealed, зареєстрований як transient сервіс за допомогою 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
Параметри, незалежні від формату, для кожного відкриття (простір імен 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 | Зарезервовано для окремо розповсюджуваного робочого процесу редактора; залишайте 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
});| Поле | Приклад | Значення |
|---|---|---|
Початковий ^ | ^ | Необов’язкове розташування по всім кутам. Без нього використовується звичайне розміщення водяного знака. |
| Текст | Confidential | Текст, що відображається на кожній сторінці. Не повинен бути порожнім. |
| Колір | Red | Названа колір, зрозуміла шаром малювання. |
| Розмір шрифту | 24 | Розмір шрифту; неправильне числове значення повертається до типового розміру рендерера. |
| Назва шрифту | Verdana | Запитана сімейство шрифтів. Переконайтеся, що він встановлений у середовищі розгортання. |
| Непрозорість | 80 | Байт‑значення від 0 до 255. Має успішно розпарситися. |
| Кут | -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)Метод присутній для узгодженості API, проте DICOM‑переглядач .NET 6 не може надати технічні теги. Він повертає null для DICOM та не‑DICOM сеансів; у DICOM‑сеансі також виводиться одноразове попередження про обмеження платформи. Рендеринг сторінок, кадрів та анімації залишається підтримуваним.
Допоміжні ресурси — 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 }))Чи була ця сторінка корисною?