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 da AddDoconut(), e risolto tramite iniezione del costruttore — non costruirlo mai direttamente.
Viewer non contiene 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.
| Sovraccarico | Usa quando |
|---|---|
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 (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 — guida il rilevamento del formato |
// Apertura semplice
string token = await viewer.OpenDocumentAsync(path);
// Con configurazione e opzioni per formato
token = await viewer.OpenDocumentAsync(
path,
new PdfConfig { AllowSearch = true, AllowCopy = true },
new DocOptions { TimeOut = 30 });
// Da un caricamento
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 è rifiutata (il messaggio contiene il motivo del rifiuto), o il formato necessita di una capacità plugin non più concessa. La scadenza del calendario senza messaggio di rifiuto degrada a rendering con filigrana invece di 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. Facoltativo — 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 per apertura, indipendenti dal formato (namespace Doconut):
| Tipo | Proprietà | Predefinito | Descrizione |
|---|---|---|---|
string | Password | "" | Password per documenti protetti (copiata automaticamente nella configurazione del formato). |
int | ImageResolution | 0 | Obsoleto. Conservato solo per compatibilità — impostare ImageResolution nella configurazione del formato invece. |
string | Watermark | "" | Testo di filigrana personalizzato 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 applicato — riservato. Il binding del token è controllato globalmente da DoconutOptions.UnsafeMode (vedi Concetti di base → Sessioni e sicurezza). |
La classe espone anche proprietà specializzate che sono intenzionalmente al di fuori del normale flusso di visualizzazione a singolo host:
| Tipo | Proprietà | Predefinito | Descrizione |
|---|---|---|---|
bool | IsWebFarm | false | Segna 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 a singolo host normale. |
bool | EditMode | false | Riservato per il flusso di lavoro Editor distribuito separatamente; lasciare false per il visualizzatore standard. |
Filigrana personalizzata
DocOptions.Watermark utilizza sei campi separati da tilde. Un ^ opzionale all'inizio 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 |
|---|---|---|
Leading ^ | ^ | Layout a tutti gli angoli opzionale. Senza di esso, viene usata la normale posizione della filigrana. |
| Text | Confidential | Testo renderizzato su ogni pagina. Non deve essere vuoto. |
| Color | Red | Colore denominato 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 licenza | Valore personalizzato fornito | Risultato renderizzato |
|---|---|---|
| Licenza viewer a pagamento valida | No | Pagina pulita |
| Licenza viewer a pagamento valida | Yes | Filigrana personalizzata |
| Viewer base temporaneo/demo attivo | No | Pagina base‑viewer pulita |
| Viewer base temporaneo/demo attivo | Yes | Filigrana personalizzata quando si applica il percorso base‑viewer pulito |
| Licenza mancante, rifiutata, scaduta, versione errata o dominio non valido | Either | Filigrana di enforcement/valutazione; il valore personalizzato non lo sovrascrive |
| Rendering del plugin secondo regole di valutazione | Either | 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 concessa in licenza, non un modo per sostituire o sopprimere la filigrana di valutazione.
API delle annotazioni
Caricamento e esportazione delle annotazioni lato server. La guida completa si trova in Guide → Annotations; la superficie è:
| 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 della pagina esplicite |
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight) | Manager indipendente dalla sessione |
void LoadAnnotationData(string token, AnnotationManager manager) | Carica annotazioni costruite in C# nella sessione |
void LoadAnnotationData(string token, string annotationData) | Carica annotazioni dalla pagina codificata/Base64 restituita da AnnotationManager.GetAnnotationData() |
void LoadAnnotationXML(string token, XmlDocument annotationXml) | Carica 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)Il metodo è presente per allineamento API, ma il visualizzatore DICOM .NET 6 non può fornire tag tecnici. Restituisce null per sessioni DICOM e non‑DICOM; in una sessione DICOM scrive anche un avviso una tantum che spiega la limitazione della piattaforma. Il rendering di pagine, fotogrammi e animazioni rimane supportato.
Helper di risorse — ReferenceCss / ReferenceScripts
Emettere 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 + visualizzatore + ricerca + annotazione
string ReferenceScripts(ScriptConfig? config = null)CssConfig flag: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (limitato alla ricerca), IncludeAnnotationCss (limitato alle annotazioni).
ScriptConfig flag: IncludeJQuery (richiesto da tutti gli altri), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts e IncludeSearchBar (limitato alla ricerca), IncludeAnnotationScripts e IncludeAnnotationBar (limitato alle annotazioni).
@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)Restituisce i nomi dei fogli di lavoro di un foglio di calcolo aperto, nell'ordine del workbook, oppure una lista vuota quando il documento aperto non è un foglio di calcolo.
Aggiunto in 26.9.0.
Questa pagina è stata utile?