Visualizzatore
La classe principale del visualizzatore di documenti
Viewer (namespace Doconut) è il punto di ingresso pubblico per aprire documenti da pagine Razor, controller MVC, componenti Blazor o API minime. È sealed, registrato come servizio transient tramite AddDoconut(), e risolto tramite iniezione del costruttore — non va mai costruito direttamente.
Viewer non mantiene stato per richiesta e intenzionalmente non implementa IDisposable: le sessioni dei documenti vivono indipendentemente nella cache della sessione, quindi la disposizione del servizio non potrebbe mai chiudere un documento aperto (vedi Concetti di base → Come funziona il Visualizzatore).
OpenDocumentAsync
Apre un documento e restituisce il token di sessione che il widget client utilizza per tutte le richieste successive.
| Overload | Quando usarlo |
|---|---|
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default) | Apertura da disco con rilevamento automatico del formato e configurazione predefinita del formato |
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default) | Hai bisogno di opzioni di rendering per formato specifico (PdfConfig, WordConfig, …) |
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default) | Il documento non è un file su disco (upload, database, blob). fileInfo deve contenere l’estensione corretta — è ciò che guida il rilevamento del formato |
// 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));Eccezioni da gestire:
LicenseException— una licenza trovata viene rifiutata (il messaggio contiene il motivo del rifiuto), o il formato richiede una capacità plugin non più concessa. La scadenza del calendario senza messaggio di rifiuto degrada a rendering con filigrana anziché lanciare un’eccezione.FormatNotSupportedException—Document format '<extension>' is not supported.InvalidDataException— il contenuto del file è corrotto o non corrisponde alla sua estensione.
CloseDocument
void CloseDocument(string token)Rimuove la sessione dalla cache (disponendo immediatamente il motore del documento), elimina il marcatore di sicurezza e revoca il permesso di accesso. Opzionale — la scadenza scorrevole esegue la stessa pulizia — ma consigliato per documenti di grandi dimensioni.
GetPageCount
int GetPageCount(string token)Numero totale di pagine della sessione aperta. Lancia un’eccezione se il token è sconosciuto o scaduto.
DocOptions
Opzioni indipendenti dal formato per ogni apertura (namespace Doconut):
| Tipo | Proprietà | Predefinito | Descrizione |
|---|---|---|---|
string | Password | "" | Password per documenti protetti (copiata automaticamente nella configurazione del formato). |
int | ImageResolution | 0 | Obsoleta. Conservata solo per compatibilità — impostare ImageResolution nella configurazione del formato invece. |
string | Watermark | "" | Testo personalizzato della filigrana disegnato sulle pagine renderizzate. Stringa di formato: "^Text~Color~FontSize~FontName~Opacity~Angle", ad es. "^Sample Copy~Red~24~Verdana~80~-45". |
int | TimeOut | 60 | Scadenza scorrevole della sessione in minuti. |
bool | IsSecured | true | Non attualmente applicata — riservata. Il binding del token è controllato globalmente da DoconutOptions.UnsafeMode (vedi Concetti di base → Sessioni e Sicurezza). |
La classe espone anche proprietà specializzate intenzionalmente al di fuori del normale flusso di visualizzazione singolo host:
| Tipo | Proprietà | Predefinito | Descrizione |
|---|---|---|---|
bool | IsWebFarm | false | Contrassegna l’operazione di apertura come scenario web‑farm. Usare solo con l’architettura di storage/sessione condivisa corrispondente. |
string | WebFarmPath | "" | Percorso condiviso usato dal flusso di lavoro web‑farm specializzato. Vuoto nel visualizzatore singolo host normale. |
bool | EditMode | false | Riservato al flusso di lavoro Editor distribuito separatamente; lasciare false per il visualizzatore standard. |
Filigrana personalizzata
DocOptions.Watermark utilizza sei campi separati da tilde. Un ^ opzionale iniziale richiede il layout a tutti gli angoli:
^Text~Color~FontSize~FontName~Opacity~Anglestring token = await viewer.OpenDocumentAsync(
path,
new PdfConfig(),
new DocOptions
{
Watermark = "^Confidential~Red~24~Verdana~80~-45",
TimeOut = 30
});| Campo | Esempio | Significato |
|---|---|---|
^ iniziale | ^ | Layout opzionale a tutti gli angoli. Senza di esso si usa il posizionamento normale della filigrana. |
| Text | Confidential | Testo renderizzato su ogni pagina. Non deve essere vuoto. |
| Color | Red | Colore nominativo compreso dal livello di disegno. |
| FontSize | 24 | Dimensione del carattere; input numerico non valido ricade sul valore predefinito del renderer. |
| FontName | Verdana | Famiglia di caratteri richiesta. Assicurarsi che sia installata nell’ambiente di distribuzione. |
| Opacity | 80 | Valore byte da 0 a 255. Deve essere analizzato correttamente. |
| Angle | -45 | Angolo di rotazione in gradi; input numerico non valido ricade sul valore predefinito. |
Il parser si aspetta esattamente sei campi dopo il ^ opzionale. Una definizione non valida viene sostituita dal fallback visibile Invalid Watermark dell'SDK invece di scomparire silenziosamente.
Decisione di licenza
| Stato della licenza | Valore personalizzato fornito | Risultato renderizzato |
|---|---|---|
| Licenza viewer a pagamento valida | No | Pagina pulita |
| Licenza viewer a pagamento valida | Sì | Filigrana personalizzata |
| Viewer base temporaneo/demo attivo | No | Pagina pulita del viewer base |
| Viewer base temporaneo/demo attivo | Sì | Filigrana personalizzata quando si applica il percorso pulito del viewer base |
| Licenza mancante, rifiutata, scaduta, versione errata o dominio non valido | Entrambi | Filigrana di enforcement/evaluazione; il valore personalizzato non la sovrascrive |
| Rendering plugin in valutazione | Entrambi | Filigrana di valutazione |
La stessa decisione viene applicata alle immagini delle pagine servite e alle esportazioni delle annotazioni. L’output GIF animato è marcato fotogramma per fotogramma. Una filigrana personalizzata è quindi una funzionalità dell’applicazione licenziata, non un modo per sostituire o sopprimere la filigrana di valutazione.
API delle annotazioni
Caricamento e esportazione delle annotazioni lato server. Il percorso completo è descritto in Guide → Annotazioni; l’interfaccia è:
| Membro | Scopo |
|---|---|
AnnotationManager GetAnnotationManager(string token) | Manager legato alle dimensioni della pagina della sessione aperta |
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight) | Manager con dimensioni di pagina esplicite |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Manager indipendente dalla sessione |
void LoadAnnotationData(string token, AnnotationManager manager) | Carica le annotazioni costruite in C# nella sessione |
void LoadAnnotationData(string token, string annotationData) | Carica le annotazioni dall’involucro codificato pagina/Base64 restituito da AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Carica le annotazioni da XML |
XmlDocument GetAnnotationXML(string token) | Esporta le annotazioni della sessione come XML |
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default) | PDF con annotazioni incorporate |
Task<int> ExportAnnotationsToPngAsync(…) | File PNG con annotazioni incorporate |
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default) | ZIP di PNG per pagina con annotazioni incorporate |
Metadati DICOM
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)Restituisce i metadati dei tag DICOM per le sessioni aperte tramite il plugin DICOM; null per documenti non DICOM.
Helper delle risorse — ReferenceCss / ReferenceScripts
Emette i tag <link>/<script> per le risorse incorporate servite da UseDoconutResources(), nell’ordine corretto di dipendenza. I bundle per funzionalità soggette a licenza, come ricerca e annotazione, sono emessi solo quando la licenza le abilita, mantenendo l’interfaccia client coerente con il comportamento del server.
string ReferenceCss(CssConfig? config = null) // null → Bootstrap + viewer + search + annotation
string ReferenceScripts(ScriptConfig? config = null)**Flag CssConfig:** IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss(ricerca soggetta a licenza),IncludeAnnotationCss` (annotazione soggetta a licenza).
**Flag ScriptConfig:** IncludeJQuery(richiesto da tutti gli altri),IncludeBootstrap, IncludeViewerScripts(core:docViewer.js+ splitter + links),IncludeSearchScriptseIncludeSearchBar(ricerca soggetta a licenza),IncludeAnnotationScriptseIncludeAnnotationBar` (annotazione soggetta a licenza).
@inject Doconut.Viewer Viewer
@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))Questa pagina è stata utile?