Переглядач

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

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

text
void CloseDocument(string token)

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

GetPageCount

text
int GetPageCount(string token)

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

DocOptions

Опції, незалежні від формату, для кожного відкриття (простір імен Doconut):

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

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

ТипВластивістьЗа замовчуваннямОпис
boolIsWebFarmfalseПозначає операцію відкриття як сценарій веб‑ферми. Використовуйте лише з відповідною архітектурою спільного сховища/сеансу.
stringWebFarmPath""Спільний шлях, що використовується спеціалізованим робочим процесом веб‑ферми. Порожній у звичайному однохостовому переглядачі.
boolEditModefalseЗарезервовано для окремо розповсюджуваного робочого процесу Editor; залиште 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
    });
ПолеПрикладЗначення
Leading ^^Необов’язкове розташування у всіх кутах. Без нього використовується звичайне розміщення водяного знака.
TextConfidentialТекст, що відображається на кожній сторінці. Не повинен бути порожнім.
ColorRedНазвана колір, яку розуміє шар малювання.
FontSize24Розмір шрифту; неправильне числове значення повертається до типового значення рендерера.
FontNameVerdanaЗапитане сімейство шрифтів. Переконайтеся, що воно встановлене у середовищі розгортання.
Opacity80Байтове значення від 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

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

Повертає метадані тегів DICOM для сесій, відкритих через плагін DICOM; null для недICOM‑документів.

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

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

text
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).

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 }))

GetWorksheetNames

text
IReadOnlyList<string> GetWorksheetNames(string token)

Повертає назви листів відкритої електронної таблиці у порядку книги, або порожній список, якщо відкритий документ не є електронною таблицею.

Додано у 26.9.0.

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