Переглядач
Головний клас переглядача документів
Viewer (простір імен Doconut) є публічною точкою входу для відкриття документів з Razor‑сторінок, MVC‑контролерів, компонентів Blazor або мінімальних API. Він запечатаний, зареєстрований як транзієнтна служба за допомогою AddDoconut(), і отримується через ін’єкцію в конструктор — ніколи не створюйте його безпосередньо.
Попередня бібліотека .NET Standard надавала публічний конструктор, який приймав кеш пам’яті, accessor HTTP‑контексту та один або кілька шляхів до ліцензій. Цей конструктор більше не існує; граф сервісів постачає ці залежності.
Viewer не зберігає стану на запит і навмисно не реалізує IDisposable: сеанси документів живуть незалежно в кеші сеансів, тому вивільнення служби ніколи не може закрити відкритий документ (див. Основні концепції → Як працює Viewer).
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 має містити правильне розширення — воно визначає формат |
// 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)Загальна кількість сторінок відкритого сеансу. Викидає виключення, якщо токен невідомий або прострочений.
Прапори можливостей
| Член | Значення |
|---|---|
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) | Завантажує анотації з кодуваного envelope сторінки/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‑ і недо‑DICOM‑сесій; у DICOM‑сесії також виводить одноразове попередження про обмеження платформи. Рендеринг сторінок, кадрів і анімації залишається підтримуваним.
Помічники ресурсів — ReferenceCss / ReferenceScripts
Виводить теги <link>/<script> для вбудованих ресурсів, що надаються UseDoconutResources(), у правильному порядку залежностей. Пакети для функцій, доступних лише за ліцензією, таких як пошук та анотація, виводяться лише коли ліцензія їх дозволяє, забезпечуючи узгодженість інтерфейсу клієнта з поведінкою сервера.
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 }))Ці помічники — підтримуваний спосіб доставки ресурсів браузера. Додатки, які скопіювали docViewer.js, documentLinks.js та docViewer.UI.js у wwwroot, повинні видалити ці копії після того, як сторінка буде відображена за допомогою виведених тегів.
Чи була ця сторінка корисною?