Переглядач
Головний клас переглядача документів
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 має містити правильне розширення — воно визначає формат |
// Просте відкриття
string token = await viewer.OpenDocumentAsync(path);
// З конфігурацією та параметрами для кожного формату
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// З завантаження
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 | Зарезервовано для окремо розповсюджуваного робочого процесу 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
});| Поле | Приклад | Значення |
|---|---|---|
Leading ^ | ^ | Необов’язкове розташування у всіх кутах. Без нього використовується звичайне розміщення водяного знака. |
| Text | Confidential | Текст, що відображається на кожній сторінці. Не повинен бути порожнім. |
| Color | Red | Названа колір, яку розуміє шар малювання. |
| FontSize | 24 | Розмір шрифту; неправильне числове значення повертається до типового значення рендерера. |
| FontName | Verdana | Запитане сімейство шрифтів. Переконайтеся, що воно встановлене у середовищі розгортання. |
| Opacity | 80 | Байтове значення від 0 до 255. Має успішно розбиратися. |
| Angle | -45 | Кут обертання у градусах; неправильне числове значення повертається до типового. |
Парсер очікує точно шість полів після необов’язкового ^. Неправильне визначення замінюється видимим запасним варіантом SDK Invalid Watermark замість того, щоб безшумно зникнути.
Рішення щодо ліцензії
| Стан ліцензії | Надано власне значення | Відображений результат |
|---|---|---|
| Дійсна платна ліцензія переглядача | Ні | Чиста сторінка |
| Дійсна платна ліцензія переглядача | Так | Користувацький водяний знак |
| Активний тимчасовий/демо базовий переглядач | Ні | Чиста сторінка базового переглядача |
| Активний тимчасовий/демо базовий переглядач | Так | Користувацький водяний знак, коли застосовується чистий шлях базового переглядача |
| Відсутня, відхилена, прострочена, неправильна версія або недійсна доменна ліцензія | Будь‑яка | Водяний знак примусу/оцінки; власне значення його не замінює |
| Відображення плагіна за правилами оцінки | Будь‑яка | Водяний знак оцінки |
Те саме рішення застосовується до зображень сторінок та експорту анотацій. Вихідний анімований GIF позначається кадр за кадром. Таким чином, користувацький водяний знак є функцією ліцензованого застосунку, а не способом замінити або придушити водяний знак оцінки.
API анотацій
Завантаження та експорт анотацій на боці сервера. Повний посібник розташований у Guides → Annotations; інтерфейс виглядає так:
| Член | Призначення |
|---|---|
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(), у правильному порядку залежностей. Пакети для функцій, обмежених ліцензією, таких як пошук та анотації, виводяться лише коли ліцензія їх дозволяє, зберігаючи інтерфейс клієнта узгодженим з поведінкою сервера.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + переглядач + пошук + анотація
string ReferenceScripts(ScriptConfig? config = null)CssConfig прапорці: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search-gated), IncludeAnnotationCss (annotation-gated).
ScriptConfig прапорці: IncludeJQuery (required by all others), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts and IncludeSearchBar (search-gated), IncludeAnnotationScripts and IncludeAnnotationBar (annotation-gated).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))GetWorksheetNames
IReadOnlyList<string> GetWorksheetNames(string token)Повертає назви листів відкритої електронної таблиці у порядку книги, або порожній список, якщо відкритий документ не є електронною таблицею.
Додано у 26.9.0.
Чи була ця сторінка корисною?