Переглядач
Головний клас переглядача документів
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 має містити правильне розширення — воно визначає формат |
// Просте відкриття
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)Загальна кількість сторінок відкритого сеансу. Викидає виключення, якщо токен невідомий або прострочений.
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 | Позначає операцію відкриття як сценарій веб‑ферми. Використовуйте лише з відповідною архітектурою спільного сховища/сеансу. |
string | WebFarmPath | "" | Спільний шлях, що використовується спеціалізованим робочим процесом веб‑ферми. Порожній у звичайному переглядачі на одному хості. |
bool | EditMode | false | Зарезервовано для окремо розповсюджуваного робочого процесу Editor; залиште 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 анотацій
Завантаження та експорт анотацій на боці сервера. Повний посібник знаходиться у розділі Посібники → Анотації; інтерфейс виглядає так:
| Член | Призначення |
|---|---|
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
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Метод присутній для узгодження API, але переглядач DICOM .NET 6 не може надавати технічні теги. Він повертає 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 (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).
@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
IReadOnlyList<string> GetWorksheetNames(string token)Повертає назви листів відкритої електронної таблиці у порядку книги, або порожній список, коли відкритий документ не є електронною таблицею.
Додано у 26.9.0.
Чи була ця сторінка корисною?