Переглядач

Головний клас переглядача документів

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 має містити правильне розширення — воно визначає формат
csharp
// 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

text
void CloseDocument(string token)

Видаляє сеанс з кешу (негайно звільняє движок документа), видаляє маркер безпеки та анулює наданий доступ. Необов’язково — скользяче закінчення терміну виконує те ж очищення — проте рекомендується для великих документів.

GetPageCount

text
int GetPageCount(string token)

Загальна кількість сторінок відкритого сеансу. Викидає виключення, якщо токен невідомий або прострочений.

Прапори можливостей

ЧленЗначення
bool IsSearchEnabledПоточна ліцензія дозволяє Search
bool IsAnnotationEnabledПоточна ліцензія дозволяє Annotation

Використовуйте ці властивості у Razor‑виді для відображення ліцензованої стрічки лише коли сервер дійсно її надає — див. Швидкий старт.

DocOptions

Параметри, незалежні від формату, що задаються під час відкриття (простір імен Doconut):

ТипВластивістьЗа замовчуваннямОпис
stringPassword""Пароль для захищених документів (автоматично копіюється у конфігурацію формату).
intImageResolution0Застаріле. Залишено лише для сумісності — замість цього встановлюйте ImageResolution у конфігурації формату.
stringWatermark""Користувацький текст водяного знаку, що малюється на відрендерених сторінках. Формат рядка: "^Text~Color~FontSize~FontName~Opacity~Angle", наприклад "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60Скользяче закінчення терміну сеансу в хвилинах.
boolIsSecuredtrueНаразі не застосовується — зарезервовано. Прив’язка токену контролюється глобально параметром DoconutOptions.UnsafeMode (див. Основні концепції → Сеанси та безпека).

Клас також містить спеціалізовані властивості, які навмисно виходять за межі звичайного однохостового процесу перегляду:

ТипВластивістьЗа замовчуваннямОпис
boolIsWebFarmfalseПозначає операцію відкриття як сценарій спільного сховища. Зверніть увагу на регістр — у попередній бібліотеці це було IsWebfarm.
stringWebFarmPath""Спільний шлях, що використовується в цьому робочому процесі. Раніше називалося WebfarmPath. Порожній у звичайному однохостовому переглядачі і не потрібен у шляху публікації, описаному в Розподілені розгортання.
boolEditModefalseЗарезервовано для окремо розповсюджуваного робочого процесу редагування; залишайте false для стандартного переглядача.

Користувацький водяний знак

DocOptions.Watermark використовує шість полів, розділених тильдами. Необов’язковий початковий символ ^ запитує розташування у всіх кутах:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string 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

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

Метод присутній для узгодженості API, проте цей пакет не може постачати технічні теги DICOM: читач метаданих постачається лише у збірці .NET 8. Він повертає null для DICOM‑ і недо‑DICOM‑сесій; у DICOM‑сесії також виводить одноразове попередження про обмеження платформи. Рендеринг сторінок, кадрів і анімації залишається підтримуваним.

Помічники ресурсів — ReferenceCss / ReferenceScripts

Виводить теги <link>/<script> для вбудованих ресурсів, що надаються UseDoconutResources(), у правильному порядку залежностей. Пакети для функцій, доступних лише за ліцензією, таких як пошук та анотація, виводяться лише коли ліцензія їх дозволяє, забезпечуючи узгодженість інтерфейсу клієнта з поведінкою сервера.

text
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 (аннотація‑залежний).

html
@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, повинні видалити ці копії після того, як сторінка буде відображена за допомогою виведених тегів.

Чи була ця сторінка корисною?