Переглядач

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

Viewer (простір імен 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
    });
ПолеПрикладЗначення
Перший ^^Необов’язкове розташування по всіх кутах. Без нього використовується звичайне розміщення водяного знаку.
ТекстConfidentialТекст, що відображається на кожній сторінці. Він не повинен бути порожнім.
КолірRedНазвана кольорова назва, зрозуміла шаром малювання.
РозмірШрифту24Розмір шрифту; неправильне числове значення повертається до типового значення рендерера.
НазваШрифтуVerdanaЗапитана сімейство шрифтів. Переконайтеся, що воно встановлене у середовищі розгортання.
Непрозорість80Байтове значення від 0 до 255. Воно має успішно розпарситися.
Кут-45Кут обертання у градусах; неправильне числове значення повертається до типового.

Парсер очікує точно шість полів після необов’язкового ^. Неправильне визначення замінюється видимим запасним варіантом SDK Invalid Watermark замість того, щоб безшумно зникнути.

Рішення щодо ліцензії

Стан ліцензіїНадане користувацьке значенняВідображений результат
Дійсна платна ліцензія переглядачаНіЧиста сторінка
Дійсна платна ліцензія переглядачаТакКористувацький водяний знак
Активний тимчасовий/демо базовий переглядачНіЧиста сторінка базового переглядача
Активний тимчасовий/демо базовий переглядачТакКористувацький водяний знак, коли застосовується чистий шлях базового переглядача
Відсутня, відхилена, прострочена, неправильна версія або недійсна доменна ліцензіяБудь-якеВодяний знак примусового/оцінювального застосування; користувацьке значення його не замінює
Відображення плагіна за правилами оцінкиБудь-якеОцінювальний водяний знак

Те саме рішення застосовується до обслуговуваних зображень сторінок та експорту анотацій. Вихідний анімований GIF позначається кадр за кадром. Таким чином, користувацький водяний знак є функцією ліцензованого застосунку, а не способом замінити або придушити оцінювальний водяний знак.

API анотацій

Завантаження та експорт анотацій на боці сервера. Повний посібник знаходиться у розділі Посібники → Анотації; інтерфейс виглядає так:

ЧленПризначення
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)Завантажити анотації з закодованої сторінки/конверту 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)

Метод присутній для узгодження API, але переглядач DICOM .NET 6 не може надавати технічні теги. Він повертає 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 (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.

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