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.

SovraccaricoUsa 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
csharp
// 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

text
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

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

TipoProprietàPredefinitoDescrizione
stringPassword""Password per documenti protetti (copiata automaticamente nella configurazione del formato).
intImageResolution0Obsoleto. Conservato solo per compatibilità — impostare ImageResolution nella configurazione del formato invece.
stringWatermark""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".
intTimeOut60Scadenza scorrevole della sessione in minuti.
boolIsSecuredtrueNon 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:

TipoProprietàPredefinitoDescrizione
boolIsWebFarmfalseSegna l'operazione di apertura come scenario web-farm. Usare solo con l'architettura di storage/sessione condivisa corrispondente.
stringWebFarmPath""Percorso condiviso usato dal flusso di lavoro web-farm specializzato. Vuoto nel visualizzatore a singolo host normale.
boolEditModefalseRiservato 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
^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
    });
CampoEsempioSignificato
Leading ^^Layout a tutti gli angoli opzionale. Senza di esso, viene usata la normale posizione della filigrana.
TextConfidentialTesto renderizzato su ogni pagina. Non deve essere vuoto.
ColorRedColore denominato compreso dal livello di disegno.
FontSize24Dimensione del carattere; input numerico non valido ricade sul valore predefinito del renderer.
FontNameVerdanaFamiglia di caratteri richiesta. Assicurarsi che sia installata nell'ambiente di distribuzione.
Opacity80Valore byte da 0 a 255. Deve essere analizzato correttamente.
Angle-45Angolo 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 licenzaValore personalizzato fornitoRisultato renderizzato
Licenza viewer a pagamento validaNoPagina pulita
Licenza viewer a pagamento validaYesFiligrana personalizzata
Viewer base temporaneo/demo attivoNoPagina base‑viewer pulita
Viewer base temporaneo/demo attivoYesFiligrana personalizzata quando si applica il percorso base‑viewer pulito
Licenza mancante, rifiutata, scaduta, versione errata o dominio non validoEitherFiligrana di enforcement/valutazione; il valore personalizzato non lo sovrascrive
Rendering del plugin secondo regole di valutazioneEitherFiligrana 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 è:

MembroScopo
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

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

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

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

GetWorksheetNames

text
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?