Переглядач
Головний клас переглядача документів
Viewer (namespace Doconut) є публічною точкою входу для відкриття документів з контролерів MVC, сторінок Web Forms та обробників. Це транзієнтна служба, створена DoconutHost.Initialize; отримайте її там, де використовуєте:
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();new Viewer() також працює після запуску DoconutHost.Initialize — він вирішує ті самі служби — що дозволяє зберегти сумісність коду, мігруваного з класичного пакету. До Initialize викликає InvalidOperationException.
Viewer не зберігає стан документа на запит і навмисно не реалізує IDisposable: сеанси документів живуть незалежно від нього, тому знищення Viewer ніколи не закриє відкритий документ (див. Як працює Переглядач).
OpenDocumentAsync
Відкриває документ і повертає токен сеансу, який віджет використовує для всіх подальших запитів. Коли UnsafeMode має значення false (за замовчуванням), токен надається ASP.NET‑сесії поточного запиту — викликайте його з запиту, у якого є стан сесії (див. Сесії та безпека).
| Перевантаження | Коли використовувати |
|---|---|
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 (HttpPostedFileBase in MVC; HttpPostedFile in Web Forms)
using (var ms = new MemoryStream())
{
await file.InputStream.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(Path.GetFileName(file.FileName)));
}Винятки для обробки:
LicenseException— ліцензію знайдено, але вона відхилена (повідомлення містить причину), або формат потребує можливості плагіна, яку ліцензія не надає.FormatNotSupportedException— жоден переглядач не підтримує розширення файлу.InvalidDataException— вміст пошкоджений або не відповідає його розширенню.
OpenDocument (синхронний)
Для коду‑бекенду Web Forms та іншого коду, який не використовує асинхронні сторінки:
string OpenDocument(string filePath, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(Stream stream, string fileName, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(byte[] bytes, string fileName, BaseConfig? config = null, DocOptions? options = null)Кожен метод повертає токен і також зберігає його в viewer.Token. fileName має містити правильне розширення. Ці обгортки безпечні для виклику зі сторінки Web Forms: шлях відкриття ніколи не відновлюється у контексті запиту ASP.NET, тому очікування не може призвести до блокування. Те ж саме не стосується кожного асинхронного API Doconut — див. розділ Web Forms у Плагіні конвертера.
CloseDocument
void CloseDocument(string token)Видаляє сесію (негайно звільняє движок документа), видаляє грант токена з поточної ASP.NET‑сесії запиту та анулює токен. За бажанням — скользяче закінчення терміну дії виконує те саме очищення — але рекомендується для великих документів.
Запити сесії
| Член | Повертає |
|---|---|
int GetPageCount(string token) | Загальна кількість сторінок відкритого документа |
(int Width, int Height) GetPageDimensions(string token, int page = 1) | Типовий розмір відображеної сторінки при 100 % масштабі — простір координат для анотацій, створених у коді |
IReadOnlyList<string> GetWorksheetNames(string token) | Відображені листи електронної таблиці у порядку книги; порожньо для інших документів |
Кожен метод генерує виключення, якщо токен невідомий або прострочений.
DocOptions
Параметри, незалежні від формату, що задаються під час відкриття (простір імен Doconut):
| Тип | Властивість | За замовчуванням | Опис |
|---|---|---|---|
string | Password | "" | Пароль для захищених документів (автоматично копіюється у конфігурацію формату). |
string | Watermark | "" | Користувацький текст водяного знака, що малюється на відображених сторінках — див. нижче. |
int | TimeOut | 60 | Скользяче закінчення терміну дії сесії, у хвилинах. |
string | BrowserId | "" | Веб‑ферми: браузер, до якого прив’язаний підписаний квиток. Встановлюється за допомогою DoconutFarmBinding.EnsureBrowserId (див. Сесії та безпека). |
string | UserId | "" | Веб‑ферми: підписаний користувач, до якого прив’язаний квиток, отримується через DoconutFarmBinding.ResolveUserId. |
int | ImageResolution | 0 | Застаріло. Замість цього встановлюйте ImageResolution у конфігурації формату. |
bool | IsSecured | true | Зарезервовано; не застосовується. Керування доступом здійснюється через DoconutOptions.UnsafeMode. |
bool | IsWebFarm / string WebFarmPath | false / "" | Залишено для коду, перенесеного з класичного пакету. Вони не перемикають режим ферми — це робить AddDoconutDistributed. |
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
});| Поле | Приклад | Значення |
|---|---|---|
Початковий ^ | ^ | Необов’язкове розташування у всіх кутах. Якщо його немає, використовується звичайне розміщення. |
| Text | Confidential | Текст, що малюється на кожній сторінці. Не повинен бути порожнім. |
| Color | Red | Ім’я кольору. |
| FontSize | 24 | Розмір шрифту; при недійсному числі використовується значення за замовчуванням. |
| FontName | Verdana | Сімейство шрифту. Має бути встановлене на сервері — у Windows Server менше шрифтів, ніж на настільному ПК. |
| Opacity | 80 | Значення від 0 до 255. Має бути коректно розпарсене. |
| Angle | -45 | Поворот у градусах; при недійсному числі використовується значення за замовчуванням. |
Парсер очікує саме шість полів після необов’язкового ^. Якщо визначення недійсне, воно замінюється на видимий текст Invalid Watermark замість тихого зникнення.
Рішення щодо ліцензії
| Стан ліцензії | Надається власне значення | Результат рендерингу |
|---|---|---|
| Дійсна платна ліцензія переглядача | Ні | Чиста сторінка |
| Дійсна платна ліцензія переглядача | Так | Користувацький водяний знак |
| Активна тимчасова/демо‑ліцензія | Ні | Чиста сторінка |
| Активна тимчасова/демо‑ліцензія | Так | Користувацький водяний знак |
| Відсутня, відхилена, прострочена, невідповідна версія або недійсний домен | Будь‑яке | Оцінний водяний знак; власне значення його не замінює |
Те саме рішення застосовується до обслуговуваних сторінок і до експорту анотацій. Користувацький водяний знак — це функція ліцензованого застосунку, а не спосіб замінити оцінний водяний знак.
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) | Завантажує закодований конверт, повернутий 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)У цьому пакеті він завжди повертає null, а запит метаданих віджету відповідає 501 Not Implemented: читання тегів DICOM недоступне в .NET Framework. DICOM рендеринг — сторінки, кадри та анімація — працює. Див. DICOM Plugin.
Помічники ресурсів — ReferenceCss / ReferenceScripts
Виводить теги <link> та <script> для ресурсів, які модуль ресурсів надає за шляхом DoconutOptions.ResourcesPath, у порядку залежностей. Файли функцій, що обмежені ліцензією (Search, Annotation), виводяться лише коли ліцензія їх дозволяє.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)
bool IsSearchEnabled { get; } // license state, for guarding ribbon init code
bool IsAnnotationEnabled { get; }CssConfig прапорці: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search-gated), IncludeAnnotationCss (annotation-gated).
ScriptConfig прапорці: IncludeJQuery (потрібний усім іншим), IncludeBootstrap, IncludeViewerScripts (основні скрипти переглядача), IncludeSearchScripts і IncludeSearchBar (search-gated), IncludeAnnotationScripts і IncludeAnnotationBar (annotation-gated).
Обидва повертають HTML: пишіть їх за допомогою @Html.Raw(...) у MVC 5 (генеруйте їх у контролері — у представленнях немає @inject) або <%= %> у Web Forms. Quick Start показує обидва.
RenderViewer
string RenderViewer(string elementId, string token, ViewerConfig? config = null)Повертає блок <script>, який ініціалізує віджет у елементі з id elementId та показує документ: docViewer({...}), створений з ViewerConfig (за замовчуванням: BasePath: '/', ResPath: 'doconut-res/images'), потім .View(token). Розмістіть його після скриптів переглядача. Згенерований скрипт не зберігає посилання на об’єкт переглядача, тому сторінка зі своєю панеллю інструментів повинна ініціалізувати віджет вручну. Див. ViewerConfig.
Веб‑ферма
string? AccessToken містить підписаний квиток, виданий під час останнього відкриття, коли активний розподілений режим і UnsafeMode має значення false; на одному сервері він null. Надішліть його у віджет разом з токеном: objViewer.View(token, access).
Чи була ця сторінка корисною?