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 przez wstrzykiwanie przez konstruktor — nigdy nie twórz go bezpośrednio.
Viewer nie posiada stanu per‑request i celowo nie implementuje IDisposable: sesje dokumentów istnieją niezależnie w pamięci podręcznej sesji, więc usunięcie 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 klienta 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 — to steruje wykrywaniem 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 przesł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— znalezione licencje są odrzucane (wiadomość zawiera przyczynę odrzucenia) lub format wymaga możliwości wtyczki, która nie jest już przyznana. Wygaśnięcie kalendarza bez komunikatu o odrzuceniu skutkuje renderowaniem z znakiem wodnym 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 odwołuje przyznany dostęp. Opcjonalnie — wygasanie przesuwne wykonuje tę samą czynność czyszczenia — ale jest zalecane dla dużych dokumentów.
GetPageCount
int GetPageCount(string token)Całkowita 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ślnie | Opis |
|---|---|---|---|
string | Password | "" | Hasło dla chronionych dokumentów (automatycznie kopiowane do konfiguracji formatu). |
int | ImageResolution | 0 | Obsolete. 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 trybem wyświetlania jednego hosta:
| Typ | Właściwość | Domyślnie | Opis |
|---|---|---|---|
bool | IsWebFarm | false | Oznacza operację otwarcia jako scenariusz farmy webowej. Używać tylko z odpowiednią architekturą współdzielonego magazynu/sesji. |
string | WebFarmPath | "" | Wspólna ścieżka używana w specjalistycznym przepływie pracy farmy webowej. Pusta w normalnym przeglądarce jednego hosta. |
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 wiodący ^ żą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 |
|---|---|---|
Wiodący ^ | ^ | Opcjonalny układ na wszystkich rogach. Bez niego używane jest standardowe rozmieszczenie znaku wodnego. |
| Tekst | Confidential | Tekst renderowany na każdej stronie. Nie może być pusty. |
| Kolor | Red | Nazwana kolor rozumiany przez warstwę rysowania. |
| RozmiarCzcionki | 24 | Rozmiar czcionki; nieprawidłowa wartość numeryczna powoduje użycie domyślnego rozmiaru renderera. |
| NazwaCzcionki | Verdana | Żądana rodzina czcionek. Upewnij się, że jest zainstalowana w środowisku wdrożeniowym. |
| Przezroczystość | 80 | Wartość bajtowa od 0 do 255. Musi zostać poprawnie sparsowana. |
| Kąt | -45 | Kąt obrotu w stopniach; nieprawidłowa wartość numeryczna powoduje użycie domyślnego. |
Parser oczekuje dokładnie sześciu pól po opcjonalnym ^. Nieprawidłowa definicja jest zastępowana widoczną w SDK alternatywą Invalid Watermark zamiast cichego zniknięcia.
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 |
| Aktywny tymczasowy/demonstracyjny podgląd bazowy | Nie | Czysta strona podglądu bazowego |
| Aktywny tymczasowy/demonstracyjny podgląd bazowy | Tak | Niestandardowy znak wodny, gdy obowiązuje czysta ścieżka podglądu bazowego |
| Brakująca, odrzucona, wygasła, nieprawidłowa wersja lub licencja nieprawidłowej domeny | Obie | Znak wodny wymuszający/oceniający; wartość niestandardowa go nie nadpisuje |
| Renderowanie wtyczki zgodnie z zasadami oceny | Obie | Znak wodny oceny |
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 oceny.
API adnotacji
Ładowanie i eksport adnotacji po stronie serwera. Pełny przewodnik znajduje się w Przewodnikach → Adnotacje; interfejs 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) | 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)Metoda istnieje dla zgodności API, ale przeglądarka DICOM .NET 6 nie może dostarczyć technicznych tagów. Zwraca null dla sesji DICOM i nie‑DICOM; w sesji DICOM dodatkowo zapisuje jednorazowe ostrzeżenie wyjaśniające ograniczenia platformy. Renderowanie stron, klatek i animacji pozostaje wspierane.
Pomocnicze zasoby — 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 interfejs klienta spójny z zachowaniem serwera.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)Flagi CssConfig: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (zabezpieczone wyszukiwaniem), IncludeAnnotationCss (zabezpieczone adnotacjami).
Flagi ScriptConfig: IncludeJQuery (wymagane przez wszystkie inne), 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 }))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?