Betrachter

Die Haupt-Dokumentbetrachterklasse

Viewer (Namespace Doconut) ist der öffentliche Einstiegspunkt zum Öffnen von Dokumenten aus Razor‑Seiten, MVC‑Controllern, Blazor‑Komponenten oder Minimal‑APIs. Es ist sealed, von AddDoconut() als transient Service registriert und wird über Konstruktorinjektion aufgelöst – niemals direkt instanziieren.

Viewer hält keinen per‑Anfrage‑Zustand und implementiert absichtlich nicht IDisposable: Dokumentensitzungen leben unabhängig im Sitzungs‑Cache, sodass das Entsorgen des Services niemals ein geöffnetes Dokument schließen könnte (siehe Kernkonzepte → Wie der Betrachter funktioniert).

OpenDocumentAsync

Öffnet ein Dokument und gibt das Sitzungstoken zurück, das das Client‑Widget für alle nachfolgenden Anfragen verwendet.

ÜberladungVerwendung
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)Öffnen von der Festplatte mit automatischer Format‑Erkennung und der Standardkonfiguration 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 Format‑Erkennung
csharp
// Einfach öffnen
string token = await viewer.OpenDocumentAsync(path);

// Mit pro-Format-Konfiguration und Optionen
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// Aus einem 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. 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

text
void CloseDocument(string token)

Entfernt die Sitzung aus dem Cache (der Dokument‑Engine wird sofort entsorgt), löscht das Sicherheitskennzeichen und widerruft die Zugriffsgewährung. Optional — die gleitende Ablaufzeit führt dieselbe Bereinigung durch — wird jedoch für große Dokumente empfohlen.

GetPageCount

text
int GetPageCount(string token)

Gesamtseitenzahl der offenen Sitzung. Wirft eine Ausnahme, wenn das Token unbekannt oder abgelaufen ist.

DocOptions

Pro‑Öffnung, formatunabhängige Optionen (Namespace Doconut):

TypEigenschaftStandardBeschreibung
stringPassword""Passwort für geschützte Dokumente (automatisch in die Formatkonfiguration kopiert).
intImageResolution0Veraltet. Nur zur Kompatibilität behalten — stattdessen ImageResolution in der Formatkonfiguration setzen.
stringWatermark""Benutzerdefinierter Wasserzeichentext, der auf gerenderten Seiten gezeichnet wird. Formatzeichenkette: "^Text~Color~FontSize~FontName~Opacity~Angle", z. B. "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60Gleitende Sitzungsablaufzeit in Minuten.
boolIsSecuredtrueDerzeit nicht erzwungen — reserviert. Tokenbindung wird global von DoconutOptions.UnsafeMode gesteuert (siehe Kernkonzepte → Sitzungen & Sicherheit).

Die Klasse stellt außerdem spezialisierte Eigenschaften bereit, die bewusst außerhalb des normalen Single‑Host‑Anzeigestroms liegen:

TypEigenschaftStandardBeschreibung
boolIsWebFarmfalseKennzeichnet die Öffnungsoperation als Web‑Farm‑Szenario. Nur mit der entsprechenden Shared‑Storage/Sitzungsarchitektur verwenden.
stringWebFarmPath""Gemeinsamer Pfad, der vom spezialisierten Web‑Farm‑Workflow verwendet wird. Im normalen Single‑Host‑Betrachter leer.
boolEditModefalseReserviert für den separat verteilten Editor‑Workflow; lassen Sie false für den Standard‑Betrachter.

Benutzerdefiniertes Wasserzeichen

DocOptions.Watermark verwendet sechs durch Tilde getrennte Felder. Ein optional führendes ^ fordert das All-Corners-Layout an:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
FeldBeispielBedeutung
Führendes ^^Optionales All-Corners-Layout. Ohne dieses wird die normale Wasserzeichenplatzierung verwendet.
TextConfidentialAuf jeder Seite gerenderter Text. Er darf nicht leer sein.
FarbeRedBenannte Farbe, die von der Zeichenebene verstanden wird.
FontSize24Schriftgröße; ungültige numerische Eingabe fällt auf den Standardrenderer zurück.
FontNameVerdanaGewünschte Schriftfamilie. Stellen Sie sicher, dass sie in der Bereitstellungsumgebung installiert ist.
Deckkraft80Byte-Wert von 0 bis 255. Er muss erfolgreich geparst werden.
Winkel-45Rotationswinkel in Grad; ungültige numerische Eingabe fällt auf den Standard zurück.

Der Parser erwartet genau sechs Felder nach dem optionalen ^. Eine ungültige Definition wird durch das sichtbare Invalid Watermark-Fallback des SDK ersetzt, anstatt stillschweigend zu verschwinden.

Lizenzentscheidung

LizenzstatusBenutzerdefinierter Wert angegebenGerendertes Ergebnis
Gültige bezahlte Viewer-LizenzNeinLeere Seite
Gültige bezahlte Viewer-LizenzJaBenutzerdefiniertes Wasserzeichen
Aktiver temporärer/Demo-BasisviewerNeinLeere Basisviewer-Seite
Aktiver temporärer/Demo-BasisviewerJaBenutzerdefiniertes Wasserzeichen, wenn der saubere Basisviewer-Pfad angewendet wird
Fehlende, abgelehnte, abgelaufene, falsche Version oder ungültige Domain-LizenzBeideDurchsetzungs-/Evaluationswasserzeichen; der benutzerdefinierte Wert überschreibt es nicht
Plugin-Rendering unter EvaluationsregelnBeideEvaluationswasserzeichen

Die gleiche Entscheidung wird auf bereitgestellte Seitenbilder und Anmerkungs‑Exporte angewendet. Animierte GIF‑Ausgabe 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.

Anmerkungen-API

Serverseitiges Laden und Exportieren von Anmerkungen. Der vollständige Leitfaden befindet sich in Anleitungen → Anmerkungen; die Oberfläche ist:

MitgliedZweck
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 der codierten Seite/Base64-Hülle, die 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 von PNGs pro Seite mit eingebrannten Anmerkungen

DICOM-Metadaten

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

Gibt DICOM-Tag-Metadaten für über das DICOM-Plugin geöffnete Sitzungen zurück; null für Nicht-DICOM-Dokumente.

Ressourcenhilfen — ReferenceCss / ReferenceScripts

Gibt die <link>/<script>-Tags für die eingebetteten Ressourcen aus, die von UseDoconutResources() bereitgestellt werden, in korrekter Abhängigkeitsreihenfolge. Bündel für lizenzabhängige Funktionen wie Suche und Anmerkungen werden nur dann ausgegeben, wenn die Lizenz sie aktiviert, wodurch die Client‑UI konsistent zum Serververhalten bleibt.

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + Betrachter + Suche + Anmerkung
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 und IncludeSearchBar (search-gated), IncludeAnnotationScripts und IncludeAnnotationBar (annotation-gated).

html
@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

text
IReadOnlyList<string> GetWorksheetNames(string token)

Gibt die Arbeitsblattnamen einer geöffneten Tabelle in der Reihenfolge der Arbeitsmappe zurück oder eine leere Liste, wenn das geöffnete Dokument keine Tabelle ist.

Hinzugefügt in 26.9.0.

War diese Seite hilfreich?