Переглядач
Головний клас переглядача документів
Viewer (namespace Doconut) є публічною точкою входу для відкриття документів з Razor‑сторінок, MVC‑контролерів, Blazor‑компонентів або мінімальних API. Він sealed, зареєстрований як transient сервіс AddDoconut(), і отримується через ін’єкцію конструктора — ніколи не створюйте його безпосередньо.
Попередня бібліотека .NET Standard надавала публічний конструктор, який приймав кеш пам’яті, доступ до HTTP‑контексту та один або кілька шляхів до ліцензій. Цей конструктор більше не існує; граф сервісів постачає ці залежності.
Viewer не містить стану, специфічного для запиту, і навмисно не реалізує IDisposable: сеанси документів живуть незалежно в кеші сеансу, тому видалення сервісу ніколи не може закрити відкритий документ (див. Core Concepts → How the Viewer Works).
OpenDocumentAsync
Відкриває документ і повертає токен сеансу, який клієнтський віджет використовує для всіх подальших запитів. Кожне відкриття є асинхронним — синхронного OpenDocument не існує.
| Перевантаження | Використовувати коли |
|---|---|
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)Загальна кількість сторінок відкритого сеансу. Викидає виключення, якщо токен невідомий або прострочений.
GetWorksheetNames
IReadOnlyList<string> GetWorksheetNames(string token)Повертає назви листів відкритої електронної таблиці у порядку книги, або порожній список, якщо відкритий документ не є електронною таблицею.
Перераховуються лише відрендерені листи: приховані та порожні листи виключаються, і коли ExcelConfig.SheetNames обмежує рендеринг, відображаються лише ці листи. Лист не завжди відповідає одній сторінці — дуже великий лист розбивається на кілька сторінок. Викидає виключення, якщо токен невідомий або прострочений.
Додано у 26.9.0.
Прапори можливостей
| Член | Значення |
|---|---|
bool IsSearchEnabled | Поточна ліцензія надає Search |
bool IsAnnotationEnabled | Поточна ліцензія надає Annotation |
Використовуйте їх у Razor‑виді, щоб відображати ліцензовану стрічку лише тоді, коли сервер дійсно її надає — дивіться Швидкий старт.
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 | Позначає операцію відкриття як сценарій спільного сховища. Зауважте регістр — у попередній бібліотеці це писалося як IsWebfarm. |
string | WebFarmPath | "" | Спільний шлях, що використовується в цьому робочому процесі. Раніше писався як 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 анотацій
Завантаження та експорт анотацій на боці сервера. Повний посібник розташований у розділі 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‑файлами по сторінках, у яких вбудовані анотації |
Кожен з цих елементів приймає токен сесії. Форма GetAnnotationManager(pageWidth, pageHeight) без сесії з попередньої бібліотеки залишається для створення анотацій поза сесією, проте їхнє завантаження все ще вимагає токен.
Метадані DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Метод присутній для узгодження API, але цей пакет не може надати технічні теги DICOM: читач метаданих постачається лише у збірці .NET 8. Він повертає null для DICOM та недICOM сесій; у DICOM‑сесії він також виводить одноразове попередження, що пояснює обмеження платформи. Відтворення сторінок, кадрів та анімації залишається підтримуваним.
Допоміжні ресурси — ReferenceCss / ReferenceScripts
Виводьте теги <link>/<script> для вбудованих ресурсів, що надаються UseDoconutResources(), у правильному порядку залежностей. Пакети для функцій, обмежених ліцензією, таких як пошук та анотації, виводяться лише коли ліцензія їх дозволяє, забезпечуючи узгодженість інтерфейсу клієнта з поведінкою сервера.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + переглядач + пошук + анотація
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 }))Ці допоміжні засоби — підтримуваний спосіб доставки ресурсів браузера. Додатки, які скопіювали docViewer.js, documentLinks.js та docViewer.UI.js у wwwroot, повинні видалити ці копії після того, як сторінка відобразиться за допомогою виведених тегів.
Чи була ця сторінка корисною?