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 przez konstruktor — nigdy nie twórz go bezpośrednio.
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 Core Concepts → How the Viewer Works).
OpenDocumentAsync
Otwiera dokument i zwraca token sesji, którego widget kliencki używa we wszystkich kolejnych żądaniach.
| 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ą formatu |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Potrzebujesz opcji renderowania per‑format (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 — decyduje o wykrywaniu 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— znalezione licencja jest odrzucona (wiadomość zawiera przyczynę odrzutu), lub format wymaga możliwości wtyczki, która nie jest już przyznana. Wygaśnięcie kalendarza bez wiadomości o odrzuceniu skutkuje renderowaniem z znakowanym wododrukiem 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 przesuwne wykonuje tę samą czynność czyszczenia — ale jest zalecane dla dużych dokumentów.
GetPageCount
int GetPageCount(string token)Łączna liczba stron otwartej sesji. Rzuca wyjątek, jeśli token jest nieznany lub wygasł.
DocOptions
Opcje niezależne od formatu, obowiązujące przy otwieraniu (przestrzeń nazw Doconut):
| Typ | Właściwość | Domyślne | Opis |
|---|---|---|---|
string | Password | "" | Hasło dla chronionych 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 | Wygasanie sesji przesuwne w minutach. |
bool | IsSecured | true | Obecnie nie wymuszane — zarezerwowane. Powiązanie tokenu jest kontrolowane globalnie przez DoconutOptions.UnsafeMode (zobacz Core Concepts → Sessions & Security). |
Klasa udostępnia również 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 web‑farm. Używać wyłącznie z odpowiednią architekturą współdzielonego magazynu/sesji. |
string | WebFarmPath | "" | Ścieżka współdzielona używana w specjalistycznym przepływie web‑farm. Pusta w normalnym podglądzie pojedynczego hosta. |
bool | EditMode | false | Zarezerwowane dla oddzielnie dystrybuowanego przepływu edytora; pozostaw false dla standardowego podglądu. |
Custom watermark
DocOptions.Watermark używa sześciu pól oddzielonych tyldą. Opcjonalny początkowy znak ^ żąda układu na 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 |
|---|---|---|
Leading ^ | ^ | Opcjonalny układ na wszystkich rogach. Bez niego używane jest normalne rozmieszczenie znaku wodnego. |
| Text | Confidential | Tekst renderowany na każdej stronie. Nie może być pusty. |
| Color | Red | Nazwana kolor rozumiany przez warstwę rysowania. |
| FontSize | 24 | Rozmiar czcionki; nieprawidłowa wartość liczbową powoduje użycie domyślnego rozmiaru renderera. |
| FontName | Verdana | Żądana rodzina czcionek. Upewnij się, że jest zainstalowana w środowisku wdrożeniowym. |
| Opacity | 80 | Wartość bajtowa od 0 do 255. Musi zostać poprawnie sparsowana. |
| Angle | -45 | Kąt obrotu w stopniach; nieprawidłowa wartość liczbową powoduje użycie domyślnego. |
Parser oczekuje dokładnie sześciu pól po opcjonalnym ^. Nieprawidłowa definicja jest zastępowana widocznym w SDK zastępczym Invalid Watermark zamiast cichego zniknięcia.
License decision
| Stan licencji | Dostarczona wartość niestandardowa | Wynik renderowania |
|---|---|---|
| Ważna płatna licencja podglądu | Nie | Czysta strona |
| Ważna płatna licencja podglądu | Tak | Niestandardowy znak wodny |
| Aktywna tymczasowa/podgląd demonstracyjny | Nie | Czysta strona bazowego podglądu |
| Aktywna tymczasowa/podgląd demonstracyjny | Tak | Niestandardowy znak wodny, gdy stosuje się czysta ścieżka bazowego podglądu |
| 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 pod zasadami ewaluacji | Dowolna | Znak wodny ewaluacyjny |
To samo rozstrzygnięcie jest stosowane 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ą licencjonowaną, a nie sposobem na zastąpienie lub usunięcie znaku wodnego ewaluacyjnego.
Annotations API
Ładowanie i eksport adnotacji po stronie serwera. Pełny przewodnik znajduje się w Guides → Annotations; interfejs wygląda następująco:
| Członek | Cel |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Menedżer powiązany z wymiarami stron 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) | Załaduj adnotacje stworzone w C# do sesji |
void LoadAnnotationData(string token, string annotationData) | Załaduj adnotacje z zakodowanej strony/envelopy Base64 zwróconej przez AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Załaduj adnotacje z XML |
XmlDocument GetAnnotationXML(string token) | Eksportuj 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 z PNG‑ami per strona z wtopionymi adnotacjami |
DICOM metadata
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Metoda jest dostępna w celu zachowania spójności API, ale przeglądarka DICOM w .NET 6 nie może dostarczyć technicznych tagów. 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.
Resource helpers — ReferenceCss / ReferenceScripts
Generuje znaczniki <link>/<script> dla osadzonych zasobów serwowanych przez UseDoconutResources(), w prawidłowej kolejności zależności. Pakiety dla funkcji zabezpieczonych licencją, takich jak wyszukiwanie i adnotacje, są emitowane tylko gdy licencja je włącza, utrzymując interfejs klienta spójny z zachowaniem serwera.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig flagi: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (zabezpieczone wyszukiwaniem), IncludeAnnotationCss (zabezpieczone adnotacjami).
ScriptConfig flagi: IncludeJQuery (wymagany przez wszystkie pozostałe), IncludeBootstrap, IncludeViewerScripts (rdzeń: docViewer.js + splitter + links), IncludeSearchScripts i IncludeSearchBar (zabezpieczone wyszukiwaniem), IncludeAnnotationScripts i IncludeAnnotationBar (zabezpieczone 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 }))Czy ta strona była pomocna?