Betrachter
Die Hauptdokumentbetrachter-Klasse
Viewer (Namespace Doconut) ist der öffentliche Einstiegspunkt zum Öffnen von Dokumenten aus Razor‑Seiten, MVC‑Controllern, Blazor‑Komponenten oder Minimal‑APIs. Er ist versiegelt, wird von AddDoconut() als transient‑Dienst registriert und über Konstruktorinjektion aufgelöst – niemals direkt instanziieren.
Die vorherige .NET‑Standard‑Bibliothek stellte einen öffentlichen Konstruktor bereit, der den Memory‑Cache, den HTTP‑Context‑Accessor und einen oder mehrere Lizenzpfade entgegennahm. Dieser Konstruktor ist nicht mehr vorhanden; das Service‑Graph liefert diese Abhängigkeiten.
Viewer hält keinen pro‑Anfrage‑Zustand und implementiert bewusst nicht IDisposable: Dokument‑Sitzungen leben eigenständig im Sitzungs‑Cache, sodass das Entsorgen des Dienstes niemals ein geöffnetes Dokument schließen könnte (siehe Core Concepts → Wie der Viewer funktioniert).
OpenDocumentAsync
Öffnet ein Dokument und gibt das Sitzungs‑Token zurück, das das Client‑Widget für alle nachfolgenden Anfragen verwendet. Jeder Öffnungsvorgang ist asynchron – es gibt kein synchrones OpenDocument.
| Überladung | Verwendung |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Öffnen von der Festplatte mit automatischer Formaterkennung und der Standard‑Konfiguration des Formats |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Sie benötigen formatbezogene 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 Formaterkennung |
// 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));Ausnahmen zu behandeln:
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. Ablauf des Kalenders ohne Ablehnungsnachricht führt zu einer Wasserzeichen‑Darstellung anstelle einer Ausnahme.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— der Dateiinhalt ist beschädigt oder stimmt nicht mit der Erweiterung überein.
CloseDocument
void CloseDocument(string token)Entfernt die Sitzung aus dem Cache (der Dokument‑Engine wird sofort entsorgt), löscht das Sicherheits‑Marker und widerruft die Zugriffsberechtigung. Optional – die gleitende Ablaufzeit 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.
Fähigkeits‑Flags
| Mitglied | Bedeutung |
|---|---|
bool IsSearchEnabled | Die aktuelle Lizenz gewährt Search |
bool IsAnnotationEnabled | Die aktuelle Lizenz gewährt Annotation |
Verwenden Sie diese in einer Razor‑View, um ein lizenziertes Ribbon nur dann zu rendern, wenn der Server es tatsächlich bereitstellt — siehe Schnellstart.
DocOptions
Pro‑Öffnung, formatunabhängige Optionen (Namespace Doconut):
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
string | Password | "" | Passwort für geschützte Dokumente (automatisch in die Format‑Konfiguration kopiert). |
int | ImageResolution | 0 | Veraltet. Nur zur Kompatibilität beibehalten – setzen Sie stattdessen ImageResolution 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 | Gleitende Sitzungsablaufzeit in Minuten. |
bool | IsSecured | true | Derzeit nicht durchgesetzt – reserviert. Token‑Binding wird global von DoconutOptions.UnsafeMode gesteuert (siehe Core Concepts → Sessions & Security). |
Die Klasse stellt außerdem spezialisierte Eigenschaften bereit, die bewusst außerhalb des normalen Single‑Host‑Betrachtungsablaufs liegen:
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
bool | IsWebFarm | false | Kennzeichnet den Öffnungsvorgang als Shared‑Storage‑Szenario. Hinweis zur Schreibweise – die vorherige Bibliothek schrieb dies IsWebfarm. |
string | WebFarmPath | "" | Gemeinsamer Pfad, der von diesem Workflow verwendet wird. Früher WebfarmPath geschrieben. Im normalen Single‑Host‑Viewer leer und nicht erforderlich für den im Abschnitt Distributed Deployments beschriebenen Veröffentlichungs‑Pfad. |
bool | EditMode | false | Reserviert für einen separat verteilten Bearbeitungs‑Workflow; für den Standard‑Viewer false belassen. |
Benutzerdefiniertes Wasserzeichen
DocOptions.Watermark verwendet sechs durch Tilde getrennte Felder. Ein optional führendes ^ fordert das Layout in allen Ecken 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 Layout in allen Ecken. Ohne dieses wird die normale Wasserzeichenplatzierung verwendet. |
| Text | Confidential | Auf jeder Seite gerenderter Text. Er darf nicht leer sein. |
| Farbe | Red | Benannte Farbe, die von der Zeichenebene verstanden wird. |
| Schriftgröße | 24 | Schriftgröße; ungültige numerische Eingabe führt zum Standardwert des Renderers. |
| Schriftname | Verdana | Gewünschte Schriftfamilie. Stellen Sie sicher, dass sie in der Bereitstellungsumgebung installiert ist. |
| Deckkraft | 80 | Byte‑Wert von 0 bis 255. Er muss erfolgreich geparst werden. |
| Winkel | -45 | Rotationswinkel in Grad; ungültige numerische Eingabe führt zum Standardwert. |
Der Parser erwartet genau sechs Felder nach dem optionalen ^. Eine ungültige Definition wird durch das im SDK sichtbare Invalid Watermark‑Fallback ersetzt, anstatt still zu verschwinden.
Lizenzentscheidung
| Lizenzstatus | Benutzerdefinierter Wert angegeben | Gerendertes Ergebnis |
|---|---|---|
| Gültige kostenpflichtige Viewer‑Lizenz | Nein | Saubere Seite |
| Gültige kostenpflichtige Viewer‑Lizenz | Ja | Benutzerdefiniertes Wasserzeichen |
| Aktiver temporärer/Demo‑Basis‑Viewer | Nein | Saubere Basis‑Viewer‑Seite |
| Aktiver temporärer/Demo‑Basis‑Viewer | Ja | Benutzerdefiniertes Wasserzeichen, wenn der saubere Basis‑Viewer‑Pfad gilt |
| Fehlende, abgelehnte, abgelaufene, falsche Version oder ungültige Domain‑Lizenz | Beliebig | Durchsetzungs‑/Evaluationswasserzeichen; der benutzerdefinierte Wert überschreibt es nicht |
| Plugin‑Rendering unter Evaluationsregeln | Beliebig | Evaluationswasserzeichen |
Die gleiche Entscheidung wird auf bereitgestellte Seitenbilder und Annotations‑Exporte angewendet. Die Ausgabe von animierten GIFs wird Bild für Bild gestempelt. Ein benutzerdefiniertes Wasserzeichen ist daher ein lizenziertes Anwendungsfeature und kein Mittel, das Evaluationswasserzeichen zu ersetzen oder zu unterdrücken.
Annotations‑API
Serverseitiges Laden und Exportieren von Anmerkungen. Die vollständige Anleitung befindet sich in Guides → Annotations; die Übersicht ist:
| Member | Zweck |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Manager, der an die Seitenabmessungen der offenen Sitzung gebunden ist |
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 Seiten-/Base64‑Umfeld, 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 von PNG‑Dateien pro Seite mit eingebrannten Anmerkungen |
Jede dieser Methoden benötigt das Sitzungstoken. Die session‑freie Form GetAnnotationManager(pageWidth, pageHeight) der vorherigen Bibliothek bleibt erhalten, um Anmerkungen außerhalb einer Sitzung zu erstellen, aber das Laden erfordert weiterhin ein Token.
DICOM-Metadaten
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Die Methode ist zur API‑Ausrichtung vorhanden, aber dieses Paket kann keine technischen DICOM‑Tags bereitstellen: Der Metadatenleser wird nur als .NET 8‑Build ausgeliefert. Sie gibt null für DICOM‑ und Nicht‑DICOM‑Sitzungen zurück; bei einer DICOM‑Sitzung schreibt sie zudem eine einmalige Warnung, die die Plattformbeschränkung erklärt. Seiten-, Frame‑ und Animations‑Rendering bleiben unterstützt.
Ressourcenhilfen — ReferenceCss / ReferenceScripts
Gibt die <link>‑/<script>‑Tags für die eingebetteten Ressourcen aus, die von UseDoconutResources() bereitgestellt werden, in korrekter Abhängigkeitsreihenfolge. Pakete für lizenzgesteuerte Funktionen wie Suche und Annotation werden nur dann ausgegeben, wenn die Lizenz sie aktiviert, wodurch die Client‑UI konsistent zum Serververhalten 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 (required by all others), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts and IncludeSearchBar (search-gated), IncludeAnnotationScripts and 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 }))Diese Hilfsfunktionen sind der empfohlene Weg, um die Browser‑Ressourcen bereitzustellen. Anwendungen, die docViewer.js, documentLinks.js und docViewer.UI.js in wwwroot kopiert haben, sollten diese Kopien entfernen, sobald die Seite die von den ausgegebenen Tags geladenen Ressourcen rendert.
War diese Seite hilfreich?