Visionneuse
Classe principale du visualiseur de documents
Viewer (namespace Doconut) est le point d'entrée public pour ouvrir des documents depuis les pages Razor, les contrôleurs MVC, les composants Blazor ou les API minimalistes. Il est scellé, enregistré comme service transient par AddDoconut(), et résolu via l'injection de constructeur — ne jamais le construire directement.
Viewer ne conserve aucun état par requête et ne met intentionnellement pas en œuvre IDisposable : les sessions de documents vivent indépendamment dans le cache de session, de sorte que la libération du service ne pourrait jamais fermer un document ouvert (voir Concepts de base → Comment le Viewer fonctionne).
OpenDocumentAsync
Ouvre un document et renvoie le jeton de session que le widget client utilise pour toutes les requêtes ultérieures.
| Surcharge | Utilisation |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Ouverture depuis le disque avec détection automatique du format et la configuration par défaut du format |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Vous avez besoin d'options de rendu spécifiques à chaque format (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Le document n'est pas un fichier sur le disque (téléversement, base de données, blob). fileInfo doit contenir l'extension correcte — elle détermine la détection du format |
// 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));Exceptions à gérer :
LicenseException— une licence trouvée est rejetée (le message indique la raison du rejet), ou le format nécessite une capacité de plugin qui n'est plus accordée. L'expiration du calendrier sans message de rejet se traduit par un rendu filigrané au lieu de lever une exception.FormatNotSupportedException—Le format de document '<extension>' n'est pas pris en charge.InvalidDataException— le contenu du fichier est corrompu ou ne correspond pas à son extension.
CloseDocument
void CloseDocument(string token)Supprime la session du cache (en libérant immédiatement le moteur de document), supprime le marqueur de sécurité et révoque l'autorisation d'accès. Optionnel — l'expiration glissante effectue le même nettoyage — mais recommandé pour les documents volumineux.
GetPageCount
int GetPageCount(string token)Nombre total de pages de la session ouverte. Lève une exception si le jeton est inconnu ou expiré.
DocOptions
Options indépendantes du format, valables par ouverture (namespace Doconut) :
| Type | Propriété | Valeur par défaut | Description |
|---|---|---|---|
string | Password | "" | Mot de passe pour les documents protégés (copié automatiquement dans la configuration du format). |
int | ImageResolution | 0 | Obsolète. Conservé uniquement pour la compatibilité — définissez ImageResolution dans la configuration du format à la place. |
string | Watermark | "" | Texte de filigrane personnalisé dessiné sur les pages rendues. Chaîne de format : "^Text~Color~FontSize~FontName~Opacity~Angle", par ex. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Expiration glissante de la session en minutes. |
bool | IsSecured | true | Pas actuellement appliqué — réservé. La liaison du jeton est contrôlée globalement par DoconutOptions.UnsafeMode (voir Concepts de base → Sessions & Sécurité). |
La classe expose également des propriétés spécialisées intentionnellement en dehors du flux de visualisation à hôte unique normal :
| Type | Propriété | Valeur par défaut | Description |
|---|---|---|---|
bool | IsWebFarm | false | Marque l'opération d'ouverture comme un scénario de ferme web. À n'utiliser qu'avec l'architecture de stockage/session partagé correspondante. |
string | WebFarmPath | "" | Chemin partagé utilisé par le flux de travail spécialisé en ferme web. Vide dans le visionneur à hôte unique normal. |
bool | EditMode | false | Réservé au flux de travail de l'éditeur distribué séparément ; laissez false pour le visionneur standard. |
Filigrane personnalisé
DocOptions.Watermark utilise six champs séparés par des tildes. Un ^ optionnel en tête demande la disposition sur tous les coins :
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Champ | Exemple | Signification |
|---|---|---|
Leading ^ | ^ | Disposition sur tous les coins optionnelle. Sans cela, le placement normal du filigrane est utilisé. |
| Text | Confidential | Texte rendu sur chaque page. Il ne doit pas être vide. |
| Color | Red | Couleur nommée reconnue par la couche de dessin. |
| FontSize | 24 | Taille de police ; une entrée numérique invalide revient à la valeur par défaut du moteur de rendu. |
| FontName | Verdana | Famille de police demandée. Assurez‑vous qu'elle est installée dans l'environnement de déploiement. |
| Opacity | 80 | Valeur d'octet de 0 à 255. Elle doit être analysée avec succès. |
| Angle | -45 | Angle de rotation en degrés ; une entrée numérique invalide revient à la valeur par défaut. |
L'analyseur attend exactement six champs après le ^ optionnel. Une définition invalide est remplacée par le filigrane de secours visible Invalid Watermark du SDK au lieu de disparaître silencieusement.
Décision de licence
| État de la licence | Valeur personnalisée fournie | Résultat rendu |
|---|---|---|
| Licence de visionneur payée valide | Non | Page propre |
| Licence de visionneur payée valide | Oui | Filigrane personnalisé |
| Visionneur de base temporaire/démo actif | Non | Page de base‑visionneur propre |
| Visionneur de base temporaire/démo actif | Oui | Filigrane personnalisé lorsque le chemin de base‑visionneur propre s'applique |
| Licence manquante, rejetée, expirée, de mauvaise version ou de domaine invalide | Quelconque | Filigrane d'application/évaluation ; la valeur personnalisée ne le remplace pas |
| Rendu de plugin sous règles d'évaluation | Quelconque | Filigrane d'évaluation |
La même décision s'applique aux images de pages servies et aux exportations d'annotations. La sortie GIF animée est marquée image par image. Un filigrane personnalisé est donc une fonctionnalité d'application sous licence, et non un moyen de remplacer ou de supprimer le filigrane d'évaluation.
API des annotations
Chargement et export d'annotations côté serveur. Le guide complet se trouve dans Guides → Annotations ; l'interface est :
| Membre | Objectif |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Gestionnaire lié aux dimensions de page de la session ouverte |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Gestionnaire avec dimensions de page explicites |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Gestionnaire indépendant de la session |
void LoadAnnotationData(string token, AnnotationManager manager) | Charger les annotations créées en C# dans la session |
void LoadAnnotationData(string token, string annotationData) | Charger les annotations depuis l'enveloppe encodée page/Base64 renvoyée par AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Charger les annotations depuis XML |
XmlDocument GetAnnotationXML(string token) | Exporter les annotations de la session au format XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF avec annotations intégrées |
Task<int> ExportAnnotationsToPngAsync(…) | Fichiers PNG avec annotations intégrées |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP de PNG par page avec annotations intégrées |
Métadonnées DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)La méthode est présente pour l'alignement de l'API, mais le visionneur DICOM .NET 6 ne peut pas fournir les balises techniques. Elle renvoie null pour les sessions DICOM et non‑DICOM ; sur une session DICOM, elle écrit également un avertissement unique expliquant la limitation de la plateforme. Le rendu de pages, de cadres et d'animations reste pris en charge.
Aides aux ressources — ReferenceCss / ReferenceScripts
Émet les balises <link>/<script> pour les ressources intégrées servies par UseDoconutResources(), dans le bon ordre de dépendance. Les paquets pour les fonctionnalités soumises à licence comme la recherche et les annotations sont émis uniquement lorsque la licence les active, maintenant l'interface client cohérente avec le comportement du serveur.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)CssConfig drapeaux : IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (recherche soumise à licence), IncludeAnnotationCss (annotation soumise à licence).
ScriptConfig drapeaux : IncludeJQuery (requis par tous les autres), IncludeBootstrap, IncludeViewerScripts (cœur : docViewer.js + séparateur + liens), IncludeSearchScripts et IncludeSearchBar (recherche soumise à licence), IncludeAnnotationScripts et IncludeAnnotationBar (annotation soumise à licence).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Cette page vous a-t-elle été utile ?