Betrachter

Die Haupt‑Dokument‑Betrachter‑Klasse

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 konstruieren.

Viewer hält keinen per‑Request‑Zustand und implementiert absichtlich nicht IDisposable: Dokumenten‑Sitzungen leben unabhängig im Sitzungs‑Cache, sodass das Entsorgen des Services niemals ein offenes Dokument schließen könnte (siehe Kernkonzepte → Wie der Viewer 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 Standard‑Konfiguration 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
csharp
// 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, die zu behandeln sind:

  • 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 ist. Ablauf des Kalenders ohne Ablehnungsnachricht führt zu einer wasserzeichenbasierten Darstellung anstelle einer Ausnahme.
  • FormatNotSupportedExceptionDocument format '<extension>' is not supported.
  • InvalidDataException — die Datei ist beschädigt oder stimmt nicht mit ihrer Erweiterung überein.

CloseDocument

text
void CloseDocument(string token)

Entfernt die Sitzung aus dem Cache (die Dokument‑Engine wird sofort entsorgt), löscht den Sicherheitsmarker und widerruft die Zugriffsberechtigung. Optional — das gleitende Verfalls‑Verfahren 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 Format‑Konfiguration kopiert).
intImageResolution0Obsolet. Nur zur Kompatibilität beibehalten — setzen Sie ImageResolution stattdessen in der Format‑Konfiguration.
stringWatermark""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".
intTimeOut60Sitzungs‑Gleitzeit‑Verfall in Minuten.
boolIsSecuredtrueDerzeit nicht erzwungen — reserviert. Token‑Binding 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‑Betrachtungs‑Flows liegen:

TypEigenschaftStandardBeschreibung
boolIsWebFarmfalseKennzeichnet die Öffnungs‑Operation als Web‑Farm‑Szenario. Nur mit der entsprechenden gemeinsamen Speicher‑/Sitzungs‑Architektur verwenden.
stringWebFarmPath""Gemeinsamer Pfad, der vom spezialisierten Web‑Farm‑Workflow verwendet wird. Im normalen Single‑Host‑Viewer leer.
boolEditModefalseReserviert für den separat verteilten Editor‑Workflow; für den Standard‑Viewer auf false belassen.

Custom watermark

DocOptions.Watermark verwendet sechs durch Tilde getrennte Felder. Ein optionales führendes ^ fordert das All‑Ecken‑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‑Ecken‑Layout. Ohne dieses wird die normale Wasserzeichen‑Platzierung verwendet.
TextConfidentialText, der auf jeder Seite gerendert wird. Darf nicht leer sein.
ColorRedBenannte Farbe, die von der Zeichenebene verstanden wird.
FontSize24Schriftgröße; ungültige numerische Eingabe fällt auf den Standard‑Renderer zurück.
FontNameVerdanaGewünschte Schriftfamilie. Stellen Sie sicher, dass sie in der Bereitstellungsumgebung installiert ist.
Opacity80Byte‑Wert von 0 bis 255. Muss erfolgreich geparst werden.
Angle-45Rotationswinkel in Grad; ungültige numerische Eingabe fällt auf den Standard zurück.

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.

Lizenzentscheidung

LizenzstatusBenutzerdefinierter Wert angegebenGerendertes Ergebnis
Gültige bezahlte Viewer‑LizenzNeinSaubere Seite
Gültige bezahlte Viewer‑LizenzJaBenutzerdefiniertes Wasserzeichen
Aktive temporäre/Demo‑Basis‑Viewer‑LizenzNeinSaubere Basis‑Viewer‑Seite
Aktive temporäre/Demo‑Basis‑Viewer‑LizenzJaBenutzerdefiniertes Wasserzeichen, wenn der saubere Basis‑Viewer‑Pfad gilt
Fehlende, abgelehnte, abgelaufene, falsche Version oder ungültige Domain‑LizenzBeliebigDurchsetzung/Evaluierungs‑Wasserzeichen; der benutzerdefinierte Wert überschreibt es nicht
Plugin‑Rendering unter EvaluierungsregelnBeliebigEvaluierungs‑Wasserzeichen

Der gleiche Entscheidungs‑Mechanismus wird auf bereitgestellte Seitenbilder und Annotations‑Exporte angewendet. Animierte GIF‑Ausgabe wird Bild für Bild gestempelt. Ein benutzerdefiniertes Wasserzeichen ist daher ein lizenziertes Anwendungs‑Feature und keine Möglichkeit, das Evaluations‑Wasserzeichen zu ersetzen oder zu unterdrücken.

Annotations API

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

MemberZweck
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 mit pro‑Seite‑PNGs, in denen Anmerkungen eingebrannt sind

DICOM metadata

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

Gibt DICOM‑Tag‑Metadaten für Sitzungen zurück, die über das DICOM‑Plugin geöffnet wurden; null für Nicht‑DICOM‑Dokumente.

Resource helpers — 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 lizenzgesteuerte Features wie Suche und Anmerkungen werden nur dann ausgegeben, wenn die Lizenz sie aktiviert, sodass die Client‑UI mit dem Server‑Verhalten konsistent bleibt.

text
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).

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 }))

War diese Seite hilfreich?