Betrachter
Die Haupt‑Dokumenten‑Betrachter‑Klasse
Viewer (Namespace Doconut) ist der öffentliche Einstiegspunkt zum Öffnen von Dokumenten aus Razor‑Seiten, MVC‑Controllern, Blazor‑Komponenten oder Minimal‑APIs. Er ist sealed, wird von AddDoconut() als transient‑Dienst registriert und über Konstruktor‑Injection aufgelöst — er darf niemals direkt instanziiert werden.
Viewer hält keinen per‑Request‑Zustand und implementiert bewusst nicht IDisposable: Dokument‑Sitzungen leben eigenständig im Sitzungs‑Cache, sodass das Entsorgen des Dienstes niemals ein offenes Dokument schließen könnte (siehe Core Concepts → Wie der Betrachter funktioniert).
OpenDocumentAsync
Öffnet ein Dokument und gibt das Sitzungs‑Token zurück, das das Client‑Widget für alle nachfolgenden Anfragen verwendet.
| Überladung | Verwendung |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Öffnen von der Festplatte mit automatischer Format‑Erkennung und den Standard‑Einstellungen des Formats |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Sie benötigen format‑spezifische Rendering‑Optionen (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Das Dokument ist keine Datei auf der Festplatte (Upload, Datenbank, Blob). fileInfo muss die korrekte Erweiterung enthalten — sie steuert die Format‑Erkennung |
// 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));Auszuwertende Ausnahmen:
LicenseException— eine gefundene Lizenz wird abgelehnt (die Meldung enthält den Ablehnungsgrund) oder das Format benötigt eine Plugin‑Fähigkeit, die nicht mehr gewährt wird. Das Ablaufdatum des Kalenders ohne Ablehnungsnachricht führt zu einer wasserzeichenbasierten Darstellung anstelle einer Ausnahme.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— der Dateiinhalt ist beschädigt oder stimmt nicht mit seiner Erweiterung überein.
CloseDocument
void CloseDocument(string token)Entfernt die Sitzung aus dem Cache (der Dokument‑Engine wird sofort entsorgt), löscht den Sicherheits‑Marker und widerruft die Zugriffs‑Gewährung. Optional — Sliding‑Expiration führt dieselbe Bereinigung durch — wird jedoch für große Dokumente empfohlen.
GetPageCount
int GetPageCount(string token)Gesamtzahl der Seiten der offenen Sitzung. Wirft eine Ausnahme, wenn das Token unbekannt oder abgelaufen ist.
DocOptions
Pro‑Öffnung, format‑unabhängige Optionen (Namespace Doconut):
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
string | Password | "" | Passwort für geschützte Dokumente (automatisch in die Format‑Konfiguration übernommen). |
int | ImageResolution | 0 | Veraltet. Nur aus Kompatibilitätsgründen erhalten — setzen Sie ImageResolution stattdessen in der Format‑Konfiguration. |
string | Watermark | "" | Benutzerdefinierter Wasserzeichen‑Text, der auf gerenderten Seiten gezeichnet wird. Format‑String: "^Text~Color~FontSize~FontName~Opacity~Angle", z. B. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Sliding‑Expiration der Sitzung in Minuten. |
bool | IsSecured | true | Derzeit nicht durchgesetzt — reserviert. Die Token‑Bindung wird global über DoconutOptions.UnsafeMode gesteuert (siehe Core Concepts → Sitzungen & Sicherheit). |
Die Klasse stellt zudem spezialisierte Eigenschaften bereit, die bewusst außerhalb des normalen Single‑Host‑Viewing‑Flows liegen:
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
bool | IsWebFarm | false | Kennzeichnet die Öffnungs‑Operation als Web‑Farm‑Szenario. Nur zusammen mit der entsprechenden geteilten Speicher‑/Sitzungs‑Architektur verwenden. |
string | WebFarmPath | "" | Geteilter Pfad, der vom spezialisierten Web‑Farm‑Workflow genutzt wird. Im normalen Single‑Host‑Viewer leer. |
bool | EditMode | false | Reserviert für den separat verteilten Editor‑Workflow; für den Standard‑Viewer auf false belassen. |
Benutzerdefiniertes Wasserzeichen
DocOptions.Watermark verwendet sechs durch Tilde getrennte Felder. Ein optional führendes ^ fordert das All‑Corners‑Layout an:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Feld | Beispiel | Bedeutung |
|---|---|---|
Führendes ^ | ^ | Optionales All‑Corners‑Layout. Ohne dieses wird die normale Wasserzeichen‑Platzierung verwendet. |
| Text | Confidential | Auf jeder Seite gerenderter Text. Darf nicht leer sein. |
| Color | Red | Benannte Farbe, die von der Zeichenebene verstanden wird. |
| FontSize | 24 | Schriftgröße; bei ungültiger numerischer Eingabe wird auf den Renderer‑Standard zurückgegriffen. |
| FontName | Verdana | Gewünschte Schriftfamilie. Stellen Sie sicher, dass sie in der Bereitstellungsumgebung installiert ist. |
| Opacity | 80 | Byte‑Wert von 0 bis 255. Muss erfolgreich geparst werden. |
| Angle | -45 | Rotationswinkel in Grad; bei ungültiger numerischer Eingabe wird der Standardwert verwendet. |
Der Parser erwartet exakt sechs Felder nach dem optionalen ^. Eine ungültige Definition wird durch das im SDK sichtbare Invalid Watermark‑Fallback ersetzt, anstatt still zu verschwinden.
Lizenz‑Entscheidung
| Lizenz‑Zustand | Benutzerdefinierter Wert angegeben | Gerendertes Ergebnis |
|---|---|---|
| Gültige kostenpflichtige Viewer‑Lizenz | Nein | Saubere Seite |
| Gültige kostenpflichtige Viewer‑Lizenz | Ja | Benutzerdefiniertes Wasserzeichen |
| Aktive temporäre/Demo‑Basis‑Viewer‑Lizenz | Nein | Saubere Basis‑Viewer‑Seite |
| Aktive temporäre/Demo‑Basis‑Viewer‑Lizenz | Ja | Benutzerdefiniertes Wasserzeichen, wenn der saubere Basis‑Viewer‑Pfad gilt |
| Fehlende, abgelehnte, abgelaufene, falsche Version oder ungültige Domain‑Lizenz | Beliebig | Durchsetzung/Evaluierungs‑Wasserzeichen; der benutzerdefinierte Wert überschreibt es nicht |
| Plugin‑Rendering unter Evaluierungs‑Regeln | Beliebig | Evaluierungs‑Wasserzeichen |
Die gleiche Entscheidung wird auf bereitgestellte Seitenbilder und Anmerkungs‑Exporte angewendet. Bei animierten GIF‑Ausgaben wird jedes Bild einzeln gestempelt. Ein benutzerdefiniertes Wasserzeichen ist daher ein lizenziertes Anwendungs‑Feature und kein Mittel, das Evaluierungs‑Wasserzeichen zu ersetzen oder zu unterdrücken.
Anmerkungen‑API
Serverseitiges Laden und Exportieren von Anmerkungen. Der komplette Leitfaden befindet sich in Guides → Anmerkungen; die Oberfläche lautet:
| Mitglied | Zweck |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Manager, gebunden an die Seitenabmessungen der offenen Sitzung |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Manager mit expliziten Seitenabmessungen |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Sitzungsunabhängiger Manager |
void LoadAnnotationData(string token, AnnotationManager manager) | Lädt in C# erstellte Anmerkungen in die Sitzung |
void LoadAnnotationData(string token, string annotationData) | Lädt Anmerkungen aus dem codierten Page/Base64‑Envelope, das von AnnotationManager.GetAnnotationData() zurückgegeben wird |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Lädt Anmerkungen aus XML |
XmlDocument GetAnnotationXML(string token) | Exportiert die Anmerkungen der Sitzung als XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF mit eingebrannten Anmerkungen |
Task<int> ExportAnnotationsToPngAsync(…) | PNG‑Dateien mit eingebrannten Anmerkungen |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP‑Archiv mit pro‑Seite‑PNGs, die Anmerkungen enthalten |
DICOM‑Metadaten
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Die Methode dient nur der API‑Ausrichtung, aber der .NET 6 DICOM‑Viewer kann keine technischen Tags liefern. Sie gibt null für DICOM‑ und Nicht‑DICOM‑Sitzungen zurück; bei einer DICOM‑Sitzung wird zudem einmalig eine Warnung ausgegeben, die die Plattform‑Beschränkung erklärt. Seiten‑, Frame‑ und Animations‑Rendering bleiben unterstützt.
Ressourcen‑Hilfsfunktionen — ReferenceCss / ReferenceScripts
Erzeugt die <link>‑/<script>‑Tags für die eingebetteten Ressourcen, die von UseDoconutResources() bereitgestellt werden, in korrekter Abhängigkeits‑Reihenfolge. Bündel für lizenz‑gesteuerte Features wie Suche und Anmerkungen werden nur dann ausgegeben, wenn die Lizenz sie aktiviert, sodass die Client‑UI mit dem Server‑Verhalten konsistent bleibt.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig‑Flags: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search‑gated), IncludeAnnotationCss (annotation‑gated).
ScriptConfig‑Flags: IncludeJQuery (erforderlich für alle anderen), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts und IncludeSearchBar (search‑gated), IncludeAnnotationScripts und IncludeAnnotationBar (annotation‑gated).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))War diese Seite hilfreich?