Przeglądarka
Główna klasa przeglądarki dokumentów
Viewer (namespace Doconut) jest publicznym punktem wejścia do otwierania dokumentów z stron Razor, kontrolerów MVC, komponentów Blazor lub minimalnych API. Jest sealed, rejestrowany jako usługa transient przez AddDoconut() i rozwiązywany poprzez wstrzykiwanie w konstruktorze — nie twórz go bezpośrednio.
Poprzednia biblioteka .NET Standard udostępniała publiczny konstruktor przyjmujący pamięciowy cache, dostęp do kontekstu HTTP oraz jedną lub więcej ścieżek licencji. Ten konstruktor został usunięty; graf usług dostarcza te zależności.
Viewer nie przechowuje stanu per‑request i celowo nie implementuje IDisposable: sesje dokumentów istnieją niezależnie w pamięci podręcznej sesji, więc zwolnienie usługi nigdy nie mogłoby zamknąć otwartego dokumentu (zobacz Podstawowe koncepcje → Jak działa Viewer).
OpenDocumentAsync
Otwiera dokument i zwraca token sesji, którego widget kliencki używa we wszystkich kolejnych żądaniach. Każde otwarcie jest asynchroniczne — nie istnieje synchroniczna metoda OpenDocument.
| Przeciążenie | Kiedy używać |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Otwieranie z dysku z automatycznym wykrywaniem formatu i domyślną konfiguracją tego formatu |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Potrzebujesz opcji renderowania specyficznych dla formatu (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Dokument nie jest plikiem na dysku (upload, baza danych, blob). fileInfo musi zawierać prawidłowe rozszerzenie — to ono steruje wykrywaniem formatu |
// 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));Wyjątki do obsłużenia:
LicenseException— znalezioną licencję odrzuca (wiadomość zawiera przyczynę odrzutu) lub format wymaga możliwości wtyczki, która nie jest już przyznana. Wygaśnięcie licencji bez komunikatu o odrzuceniu skutkuje renderowaniem z znakiem wodnym zamiast wyrzucenia wyjątku.FormatNotSupportedException— format dokumentu „” nie jest obsługiwany. InvalidDataException— zawartość pliku jest uszkodzona lub nie pasuje do jego rozszerzenia.
CloseDocument
void CloseDocument(string token)Usuwa sesję z pamięci podręcznej (natychmiast zwalnia silnik dokumentu), usuwa znacznik bezpieczeństwa i cofa przyznany dostęp. Opcjonalnie — wygasanie ze ślizgiem wykonuje tę samą czynność, ale jest zalecane przy dużych dokumentach.
GetPageCount
int GetPageCount(string token)Zwraca całkowitą liczbę stron otwartej sesji. Rzuca wyjątek, jeśli token jest nieznany lub wygasł.
Flagi możliwości
| Członek | Znaczenie |
|---|---|
bool IsSearchEnabled | Obecna licencja przyznaje możliwość wyszukiwania |
bool IsAnnotationEnabled | Obecna licencja przyznaje możliwość adnotacji |
Użyj ich w widoku Razor, aby wyświetlić licencjonowany pasek tylko wtedy, gdy serwer faktycznie go udostępni — zobacz Szybki start.
DocOptions
Opcje niezależne od formatu, obowiązujące przy każdym otwarciu (namespace Doconut):
| Typ | Właściwość | Domyślne | Opis |
|---|---|---|---|
string | Password | "" | Hasło dla zabezpieczonych dokumentów (automatycznie kopiowane do konfiguracji formatu). |
int | ImageResolution | 0 | Przestarzałe. Zachowane wyłącznie dla kompatybilności — zamiast tego ustaw ImageResolution w konfiguracji formatu. |
string | Watermark | "" | Niestandardowy tekst znaku wodnego rysowany na renderowanych stronach. Format ciągu: "^Text~Color~FontSize~FontName~Opacity~Angle", np. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Czas wygaśnięcia sesji ze ślizgiem w minutach. |
bool | IsSecured | true | Obecnie nie wymuszane — zarezerwowane. Powiązanie tokenu jest kontrolowane globalnie przez DoconutOptions.UnsafeMode (zobacz Podstawowe koncepcje → Sesje i bezpieczeństwo). |
Klasa udostępnia także specjalistyczne właściwości, które są celowo poza normalnym przepływem podglądu w pojedynczym hoście:
| Typ | Właściwość | Domyślne | Opis |
|---|---|---|---|
bool | IsWebFarm | false | Oznacza operację otwarcia jako scenariusz współdzielonego magazynu. Zwróć uwagę na wielkość liter — poprzednia biblioteka nazwała to IsWebfarm. |
string | WebFarmPath | "" | Wspólna ścieżka używana w tym przepływie pracy. Poprzednio nazwano WebfarmPath. Pusta w normalnym podglądzie jednego hosta i nie jest potrzebna w ścieżce publikacji opisanej w Rozproszone wdrożenia. |
bool | EditMode | false | Zarezerwowane dla oddzielnie dystrybuowanego przepływu edycji; pozostaw false dla standardowego podglądu. |
Niestandardowy znak wodny
DocOptions.Watermark używa sześciu pól oddzielonych tyldą. Opcjonalny początkowy ^ żąda układu we wszystkich rogach:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Pole | Przykład | Znaczenie |
|---|---|---|
Początkowy ^ | ^ | Opcjonalny układ we wszystkich rogach. Bez niego używany jest normalny układ znaku wodnego. |
| Tekst | Confidential | Tekst wyświetlany na każdej stronie. Nie może być pusty. |
| Kolor | Red | Nazwana barwa rozumiana przez warstwę rysowania. |
| Rozmiar czcionki | 24 | Rozmiar czcionki; nieprawidłowa wartość numeryczna powoduje użycie domyślnego rozmiaru renderera. |
| Nazwa czcionki | Verdana | Żądana rodzina czcionek. Upewnij się, że jest zainstalowana w środowisku wdrożeniowym. |
| Przezroczystość | 80 | Wartość bajtowa od 0 do 255. Musi zostać prawidłowo sparsowana. |
| Kąt | -45 | Kąt obrotu w stopniach; nieprawidłowa wartość numeryczna powoduje użycie domyślnego kąta. |
Parser oczekuje dokładnie sześciu pól po opcjonalnym ^. Nieprawidłowa definicja jest zastępowana widoczną w SDK wartością Invalid Watermark zamiast zniknąć cicho.
Decyzja licencyjna
| Stan licencji | Dostarczona wartość niestandardowa | Wynik renderowania |
|---|---|---|
| Ważna płatna licencja przeglądarki | Nie | Czysta strona |
| Ważna płatna licencja przeglądarki | Tak | Niestandardowy znak wodny |
| Aktywna tymczasowa/demo podstawa przeglądarki | Nie | Czysta strona bazowa przeglądarki |
| Aktywna tymczasowa/demo podstawa przeglądarki | Tak | Niestandardowy znak wodny, gdy stosuje się czysta ścieżka bazowa przeglądarki |
| Brak, odrzucona, wygasła, nieprawidłowa wersja lub nieprawidłowa domena licencji | Dowolna | Znak wodny wymuszający/ewaluacyjny; wartość niestandardowa go nie nadpisuje |
| Renderowanie wtyczki w ramach zasad ewaluacji | Dowolna | Znak wodny ewaluacyjny |
Ta sama decyzja ma zastosowanie do serwowanych obrazów stron i eksportów adnotacji. Wyjście w formacie animowanego GIF jest znakowane klatka po klatce. Niestandardowy znak wodny jest więc funkcją aplikacji objętą licencją, a nie sposobem na zastąpienie lub ukrycie znaku wodnego ewaluacji.
API adnotacji
Ładowanie i eksport adnotacji po stronie serwera. Pełny przewodnik znajduje się w Przewodnikach → Adnotacje; najważniejsze elementy to:
| Członek | Cel |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Menedżer powiązany z wymiarami strony otwartej sesji |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Menedżer z wyraźnie określonymi wymiarami strony |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Menedżer niezależny od sesji |
void LoadAnnotationData(string token, AnnotationManager manager) | Ładuje adnotacje stworzone w C# do sesji |
void LoadAnnotationData(string token, string annotationData) | Ładuje adnotacje z zakodowanej strony/envelopy Base64 zwróconej przez AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Ładuje adnotacje z XML |
XmlDocument GetAnnotationXML(string token) | Eksportuje adnotacje sesji jako XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF z wtopionymi adnotacjami |
Task<int> ExportAnnotationsToPngAsync(…) | Pliki PNG z wtopionymi adnotacjami |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP ze stronowymi PNG‑ami z wtopionymi adnotacjami |
Każda z tych metod przyjmuje token sesji. Kształt biblioteki poprzedniej, wolny od sesji
GetAnnotationManager(pageWidth, pageHeight), nadal istnieje do budowania adnotacji
poza sesją, ale ich ładowanie wciąż wymaga tokenu.
Metadane DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Metoda jest dostępna w celu zachowania zgodności API, ale ten pakiet nie może dostarczyć technicznych tagów DICOM: czytnik metadanych jest dostępny jedynie w wersji .NET 8. Zwraca null dla sesji DICOM i nie‑DICOM; w sesji DICOM dodatkowo wypisuje jednorazowe ostrzeżenie wyjaśniające ograniczenie platformy. Renderowanie stron, klatek i animacji pozostaje wspierane.
Pomocnicy zasobów — ReferenceCss / ReferenceScripts
Emituj tagi <link>/<script> dla osadzonych zasobów udostępnianych przez UseDoconutResources(), w prawidłowej kolejności zależności. Pakiety dla funkcji ograniczonych licencją, takich jak wyszukiwanie i adnotacje, są emitowane tylko gdy licencja je włącza, co zapewnia spójność interfejsu klienta z zachowaniem serwera.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Flagi CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (ograniczone wyszukiwaniem), IncludeAnnotationCss (ograniczone adnotacjami).
Flagi ScriptConfig: IncludeJQuery (wymagane przez wszystkie pozostałe), IncludeBootstrap, IncludeViewerScripts (rdzeń: docViewer.js + splitter + links), IncludeSearchScripts i IncludeSearchBar (ograniczone wyszukiwaniem), IncludeAnnotationScripts i IncludeAnnotationBar (ograniczone adnotacjami).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Ci pomocnicy są wspieraną metodą dostarczania zasobów przeglądarki. Aplikacje, które skopiowały docViewer.js, documentLinks.js i docViewer.UI.js do wwwroot, powinny usunąć te kopie, gdy strona zostanie wyrenderowana przy użyciu wygenerowanych tagów.
Czy ta strona była pomocna?