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.

OverloadQuando 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
csharp
// 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.
  • FormatNotSupportedExceptionDocument 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. Opzionale — 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 indipendenti dal formato per ogni apertura (namespace Doconut):

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

TipoProprietàPredefinitoDescrizione
boolIsWebFarmfalseContrassegna 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 singolo host normale.
boolEditModefalseRiservato 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
^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
^ iniziale^Layout opzionale a tutti gli angoli. Senza di esso si usa il posizionamento normale della filigrana.
TextConfidentialTesto renderizzato su ogni pagina. Non deve essere vuoto.
ColorRedColore nominativo 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 della licenzaValore personalizzato fornitoRisultato renderizzato
Licenza viewer a pagamento validaNoPagina pulita
Licenza viewer a pagamento validaFiligrana personalizzata
Viewer base temporaneo/demo attivoNoPagina pulita del viewer base
Viewer base temporaneo/demo attivoFiligrana personalizzata quando si applica il percorso pulito del viewer base
Licenza mancante, rifiutata, scaduta, versione errata o dominio non validoEntrambiFiligrana di enforcement/evaluazione; il valore personalizzato non la sovrascrive
Rendering plugin in valutazioneEntrambiFiligrana 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 è:

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

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

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

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

Questa pagina è stata utile?