Viewer
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 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 Viewer).
OpenDocumentAsync
Apre un documento e restituisce il token di sessione che il widget client utilizza per tutte le richieste successive.
| Sovraccarico | 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 (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 — è essa a guidare 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 richiede una capacità di plugin che non è più concessa. La scadenza del calendario senza un 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. Opzionale — la scadenza scorrevole esegue la stessa pulizia — ma è consigliata 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 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 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 su 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/session condivisa corrispondente. |
string | WebFarmPath | "" | Percorso condiviso usato dal flusso di lavoro web-farm specializzato. Vuoto nel visualizzatore normale a singolo host. |
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 precedente 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; un input numerico non valido ricade sul valore predefinito del renderer. |
| FontName | Verdana | Famiglia di caratteri richiesta. Assicurati 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; un input numerico non valido ricade sul valore predefinito. |
L'analizzatore 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 base-viewer pulita |
| Viewer base Temporaneo/Demo attivo | Sì | Filigrana personalizzata quando si applica il percorso base-viewer pulito |
| Licenza mancante, rifiutata, scaduta, versione errata o dominio non valido | Entrambi | Filigrana di enforcement/valutazione; il valore personalizzato non la sovrascrive |
| Rendering del plugin secondo le regole di valutazione | Entrambi | Filigrana di valutazione |
La stessa decisione viene applicata alle immagini delle pagine servite e alle esportazioni delle annotazioni. L'output GIF animato viene marchiato 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 Guides → Annotations; la sintesi è:
| 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 le annotazioni create in C# nella sessione |
void LoadAnnotationData(string token, string annotationData) | Carica le annotazioni dalla pagina codificata/da envelope 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 di risorse — ReferenceCss / ReferenceScripts
Emette i tag <link>/<script> per le risorse incorporate servite da UseDoconutResources(), nell'ordine di dipendenza corretto. I bundle per funzionalità soggette a licenza, come ricerca e annotazione, vengono 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 (soggetto a ricerca), IncludeAnnotationCss (soggetto ad annotazione).
ScriptConfig flag: IncludeJQuery (richiesto da tutti gli altri), IncludeBootstrap, IncludeViewerScripts (core: docViewer.js + splitter + links), IncludeSearchScripts e IncludeSearchBar (soggetto a ricerca), IncludeAnnotationScripts e IncludeAnnotationBar (soggetto ad annotazione).
@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, o una lista vuota quando il documento aperto non è un foglio di calcolo.
Aggiunto nella 26.9.0.
Questa pagina è stata utile?