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, zarejestrowany 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 zamknie otwartego dokumentu (zobacz Podstawowe koncepcje → Jak działa przeglądarka).
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 |
// Proste otwarcie
string token = await viewer.OpenDocumentAsync(path);
// Z konfiguracją i opcjami dla każdego formatu
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// Z przesyłania
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— znaleziona licencja jest odrzucona (wiadomość zawiera przyczynę odrzucenia) 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 znakami wodnymi zamiast wyrzucenia wyjątku.FormatNotSupportedException—Document format '<extension>' is not supported.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 (namespace Doconut):
| Typ | Właściwość | Domyślna wartość | Opis |
|---|---|---|---|
string | Password | "" | Hasło do 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. Łańcuch formatu: "^Text~Color~FontSize~FontName~Opacity~Angle", np. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Przesuwne wygasanie sesji w minutach. |
bool | IsSecured | true | Obecnie nie egzekwowane — zarezerwowane. Powiązanie tokenu jest kontrolowane globalnie przez DoconutOptions.UnsafeMode (zobacz Podstawowe koncepcje → Sesje i bezpieczeństwo). |
Klasa udostępnia również specjalistyczne właściwości, które są celowo poza normalnym przepływem przeglądania w pojedynczym hoście:
| Typ | Właściwość | Domyślna wartość | Opis |
|---|---|---|---|
bool | IsWebFarm | false | Oznacza operację otwarcia jako scenariusz farmy sieciowej. Używać wyłącznie z odpowiednią architekturą współdzielonego magazynu/sesji. |
string | WebFarmPath | "" | Wspólna ścieżka używana w specjalistycznym przepływie farmy sieciowej. Pusta w normalnym przeglądarce jednopodstawowej. |
bool | EditMode | false | Zarezerwowane dla oddzielnie dystrybuowanego przepływu pracy Edytora; pozostaw false dla standardowego przeglądarki. |
Niestandardowy znak wodny
DocOptions.Watermark używa sześciu pól oddzielonych tyldą. Opcjonalny początkowy ^ żą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 | Nazwany kolor rozumiany przez warstwę rysowania. |
| FontSize | 24 | Rozmiar czcionki; nieprawidłowy numeryczny input 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łowy numeryczny input powoduje użycie domyślnego. |
Parser oczekuje dokładnie sześciu pól po opcjonalnym ^. Nieprawidłowa definicja jest zastępowana widoczną w SDK Invalid Watermark jako fallback zamiast cichego zniknięcia.
Decyzja licencyjna
| 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 |
| Aktywny tymczasowy/pokazowy podgląd bazowy | Nie | Czysta strona podglądu bazowego |
| Aktywny tymczasowy/pokazowy podgląd bazowy | Tak | Niestandardowy znak wodny, gdy stosowana jest czysta ścieżka podglądu bazowego |
| Brakująca, odrzucona, wygasła, nieprawidłowa wersja lub licencja nieprawidłowej domeny | Oba | Znak wodny wymuszania/ewaluacji; wartość niestandardowa nie nadpisuje go |
| Renderowanie wtyczki zgodnie z zasadami ewaluacji | Oba | Znak wodny ewaluacji |
Ta sama decyzja jest stosowana 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 Przewodniki → Adnotacje; interfejs wygląda następująco:
| 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) | Wczytaj adnotacje stworzone w C# do sesji |
void LoadAnnotationData(string token, string annotationData) | Wczytaj adnotacje z zakodowanej strony/envelopy Base64 zwróconej przez AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Wczytaj 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 |
Metadane DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Zwraca metadane tagów DICOM dla sesji otwieranych przez wtyczkę DICOM; null dla dokumentów nie‑DICOM.
Pomocnicy zasobów — ReferenceCss / ReferenceScripts
Emituj tagi <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 umożliwia, utrzymując spójność UI klienta z zachowaniem serwera.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + przeglądarka + wyszukiwanie + adnotacja
string ReferenceScripts(ScriptConfig? config = null)CssConfig flagi: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (zabezpieczone wyszukiwaniem), IncludeAnnotationCss (zabezpieczone adnotacją).
ScriptConfig flagi: IncludeJQuery (wymagane przez wszystkie pozostałe), IncludeBootstrap, IncludeViewerScripts (rdzeń: docViewer.js + splitter + links), IncludeSearchScripts i IncludeSearchBar (zabezpieczone wyszukiwaniem), IncludeAnnotationScripts i IncludeAnnotationBar (zabezpieczone adnotacją).
@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)Zwraca nazwy arkuszy otwartego arkusza kalkulacyjnego, w kolejności skoroszytu, lub pustą listę, gdy otwarty dokument nie jest arkuszem kalkulacyjnym.
Dodano w wersji 26.9.0.
Czy ta strona była pomocna?