Viewer
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, registriert als transient Service von AddDoconut() und wird über Konstruktorinjektion aufgelöst – niemals direkt konstruieren.
Viewer hält keinen per‑Anfrage‑Zustand und implementiert absichtlich nicht IDisposable: Dokumentensitzungen leben unabhängig im Sitzungs‑Cache, sodass das Entsorgen des Dienstes niemals ein geöffnetes Dokument schließen kann (siehe Kernkonzepte → 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.
| Überladung | Verwendung |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Öffnen von der Festplatte mit automatischer Formaterkennung 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 Formaterkennung |
// 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 wassergezeichneten 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 (entsorgt die Dokument‑Engine sofort), löscht den Sicherheitsmarker 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)Gesamtseitenzahl der offenen Sitzung. Wirft eine Ausnahme, wenn das Token unbekannt oder abgelaufen ist.
DocOptions
Pro‑Öffnung, formatunabhängige Optionen (Namespace Doconut):
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
string | Password | "" | Passwort für geschützte Dokumente (automatisch in die Formatkonfiguration kopiert). |
int | ImageResolution | 0 | Veraltet. Nur zur Kompatibilität behalten — stattdessen ImageResolution in der Formatkonfiguration setzen. |
string | Watermark | "" | Benutzerdefinierter Wasserzeichen‑Text, der auf gerenderten Seiten gezeichnet wird. Formatzeichenkette: "^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 erzwungen — reserviert. Token‑Bindung 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:
| Typ | Eigenschaft | Standard | Beschreibung |
|---|---|---|---|
bool | IsWebFarm | false | Markiert die Öffnungsoperation als Web‑Farm‑Szenario. Nur mit der entsprechenden gemeinsam genutzten Speicher‑/Sitzungsarchitektur verwenden. |
string | WebFarmPath | "" | Gemeinsamer Pfad, der vom spezialisierten Web‑Farm‑Workflow verwendet wird. Im normalen Single‑Host‑Viewer leer. |
bool | EditMode | false | Reserviert für den separat verteilten Editor‑Workflow; lassen Sie false für den Standard‑Viewer. |
Benutzerdefiniertes Wasserzeichen
DocOptions.Watermark verwendet sechs durch Tilde getrennte Felder. Ein optional führendes ^ fordert das All‑Ecken‑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 |
|---|---|---|
Leading ^ | ^ | Optionales All‑Ecken‑Layout. Ohne dieses wird die normale Wasserzeichenplatzierung verwendet. |
| Text | Confidential | Auf jeder Seite gerenderter Text. Er darf nicht leer sein. |
| Color | Red | Benannte Farbe, die von der Zeichenebene verstanden wird. |
| FontSize | 24 | Schriftgröße; ungültige numerische Eingabe fällt auf den Standard des Renderers zurück. |
| FontName | Verdana | Gewünschte Schriftfamilie. Stellen Sie sicher, dass sie in der Bereitstellungsumgebung installiert ist. |
| Opacity | 80 | Byte‑Wert von 0 bis 255. Er muss erfolgreich geparst werden. |
| Angle | -45 | Rotationswinkel 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 den sichtbaren Invalid Watermark‑Fallback des SDK ersetzt, anstatt stillschweigend zu verschwinden.
Lizenzentscheidung
| Lizenzstatus | Benutzerdefinierter Wert angegeben | Gerendertes Ergebnis |
|---|---|---|
| Gültige kostenpflichtige Viewer‑Lizenz | Nein | Leere Seite |
| Gültige kostenpflichtige Viewer‑Lizenz | Ja | Benutzerdefiniertes Wasserzeichen |
| Aktiver temporärer/Demo‑Basisviewer | Nein | Leere Basisviewer‑Seite |
| Aktiver temporärer/Demo‑Basisviewer | Ja | Benutzerdefiniertes Wasserzeichen, wenn der saubere Basisviewer‑Pfad angewendet wird |
| Fehlende, abgelehnte, abgelaufene, falsche Version oder ungültige Domain‑Lizenz | Beide | Durchsetzungs‑/Evaluationswasserzeichen; der benutzerdefinierte Wert überschreibt es nicht |
| Plugin‑Rendering unter Evaluationsregeln | Beide | Evaluationswasserzeichen |
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.
Anmerkungs‑API
Serverseitiges Laden und Exportieren von Anmerkungen. Die vollständige Anleitung befindet sich in Leitfäden → Anmerkungen; die Oberfläche ist:
| Mitglied | 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 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 mit pro Seite PNGs, die Anmerkungen eingebrannt haben |
DICOM‑Metadaten
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Die Methode dient der API‑Ausrichtung, aber der .NET 6 DICOM‑Viewer kann keine technischen Tags bereitstellen. Sie gibt null für DICOM‑ und Nicht‑DICOM‑Sitzungen zurück; bei einer DICOM‑Sitzung schreibt sie außerdem eine einmalige Warnung, die die Plattform‑Beschränkung erklärt. Seiten-, Frame‑ und Animations‑Rendering bleiben unterstützt.
Ressourcen‑Hilfsprogramme — ReferenceCss / ReferenceScripts
Geben Sie die <link>/<script>‑Tags für die eingebetteten Ressourcen aus, die von UseDoconutResources() bereitgestellt werden, in korrekter Abhängigkeitsreihenfolge. Bündel für lizenzgesteuerte Funktionen wie Suche und Anmerkung werden nur dann ausgegeben, wenn die Lizenz sie aktiviert, sodass die Client‑UI mit dem Serververhalten konsistent bleibt.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig‑Flags: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (Such‑gesteuert), IncludeAnnotationCss (Anmerkungs‑gesteuert).
ScriptConfig‑Flags: IncludeJQuery (von allen anderen benötigt), IncludeBootstrap, IncludeViewerScripts (Kern: docViewer.js + Splitter + Links), IncludeSearchScripts und IncludeSearchBar (Such‑gesteuert), IncludeAnnotationScripts und IncludeAnnotationBar (Anmerkungs‑gesteuert).
@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)Gibt die Arbeitsblattnamen einer geöffneten Tabelle in Arbeitsmappenreihenfolge zurück oder eine leere Liste, wenn das geöffnete Dokument keine Tabelle ist.
Hinzugefügt in 26.9.0.
War diese Seite hilfreich?