Visualizzatore

La classe principale del visualizzatore di documenti

Viewer (namespace Doconut) è il punto di ingresso pubblico per aprire documenti da controller MVC, pagine Web Forms e gestori. È un servizio transient composto da DoconutHost.Initialize; risolvilo dove lo utilizzi:

csharp
var viewer = Doconut.DoconutHost.Services.GetRequiredService<Viewer>();

new Viewer() funziona anche una volta che DoconutHost.Initialize è stato eseguito — risolve gli stessi servizi — il che mantiene il codice migrato dal pacchetto classico compilabile. Prima di Initialize, genera InvalidOperationException.

Viewer non mantiene alcuno stato del documento per richiesta e intenzionalmente non implementa IDisposable: le sessioni dei documenti vivono indipendentemente da esso, quindi la disposizione di un Viewer non potrebbe mai chiudere un documento aperto (vedi Come funziona il visualizzatore).

OpenDocumentAsync

Apre un documento e restituisce il token di sessione che il widget utilizza per ogni successiva richiesta. Quando UnsafeMode è false (impostazione predefinita), il token viene assegnato alla sessione ASP.NET della richiesta corrente — chiamalo da una richiesta che dispone di stato di sessione (vedi Sessioni e sicurezza).

SovraccaricoQuando 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 (un upload, un database, un blob). fileInfo deve contenere l'estensione corretta — seleziona il 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 (HttpPostedFileBase in MVC; HttpPostedFile in Web Forms)
using (var ms = new MemoryStream())
{
    await file.InputStream.CopyToAsync(ms);
    ms.Position = 0;
    token = await viewer.OpenDocumentAsync(ms, new FileInfo(Path.GetFileName(file.FileName)));
}

Eccezioni da gestire:

  • LicenseException — è stata trovata una licenza ma è stata rifiutata (il messaggio contiene il motivo), o il formato richiede una funzionalità plugin che la licenza non concede.
  • FormatNotSupportedException — nessun visualizzatore gestisce l'estensione del file.
  • InvalidDataException — il contenuto è corrotto o non corrisponde alla sua estensione.

OpenDocument (sincrono)

Per il code-behind di Web Forms e altro codice che non utilizza pagine asincrone:

text
string OpenDocument(string filePath, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(Stream stream, string fileName, BaseConfig? config = null, DocOptions? options = null)
string OpenDocument(byte[] bytes, string fileName, BaseConfig? config = null, DocOptions? options = null)

Ciascuno restituisce il token e lo memorizza anche in viewer.Token. fileName deve contenere l'estensione corretta. Questi wrapper sono sicuri da chiamare da una pagina Web Forms: il percorso di apertura non riprende mai sul contesto di richiesta ASP.NET, quindi attendere su di esso non può causare deadlock. Lo stesso non è vero per tutte le API asincrone Doconut — vedi la sezione Web Forms di Plugin di conversione.

CloseDocument

text
void CloseDocument(string token)

Rimuove la sessione (rilasciando immediatamente il motore del documento), rimuove il grant del token dalla sessione ASP.NET della richiesta corrente e revoca il token. Opzionale — la scadenza scorrevole esegue la stessa pulizia — ma è consigliata per documenti di grandi dimensioni.

Query di sessione

MembroRestituisce
int GetPageCount(string token)Numero totale di pagine del documento aperto
(int Width, int Height) GetPageDimensions(string token, int page = 1)Dimensione predefinita della pagina renderizzata al 100% di zoom — lo spazio di coordinate per le annotazioni integrate nel codice
IReadOnlyList<string> GetWorksheetNames(string token)Fogli di lavoro renderizzati di un foglio di calcolo, nell'ordine della cartella di lavoro; vuoto per altri documenti

Ogni metodo genera 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).
stringWatermark""Testo personalizzato della filigrana disegnato sulle pagine renderizzate — vedi sotto.
intTimeOut60Scadenza scorrevole della sessione, in minuti.
stringBrowserId""Web farm: il browser a cui è legato un ticket firmato. Impostalo con DoconutFarmBinding.EnsureBrowserId (vedi Sessioni e Sicurezza).
stringUserId""Web farm: l'utente autenticato a cui è legato un ticket, da DoconutFarmBinding.ResolveUserId.
intImageResolution0Obsoleto. Imposta ImageResolution nella configurazione del formato invece.
boolIsSecuredtrueRiservato; non applicato. Il controllo degli accessi è DoconutOptions.UnsafeMode.
boolIsWebFarm / string WebFarmPathfalse / ""Mantenuto per codice migrato dal pacchetto classico. Non attivano la modalità farm — lo fa AddDoconutDistributed.
boolEditModefalseRiservato per l'editor distribuito separatamente; lascia false.

Filigrana personalizzata

DocOptions.Watermark accetta 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 opzionale a tutti gli angoli. Senza di esso, viene usata la posizione normale.
TextConfidentialTesto disegnato su ogni pagina. Non deve essere vuoto.
ColorRedUn colore denominato.
FontSize24Dimensione del carattere; input numerico non valido ripiega al valore predefinito.
FontNameVerdanaFamiglia di caratteri. Deve essere installata sul server — Windows Server ha meno font rispetto a un desktop.
Opacity80Da 0 a 255. Deve essere analizzabile.
Angle-45Rotazione in gradi; input numerico non valido ripiega al valore predefinito.

L'analizzatore si aspetta esattamente sei campi dopo il ^ opzionale. Una definizione non valida viene sostituita da un testo Invalid Watermark visibile invece di scomparire silenziosamente.

Decisione di licenza

Stato della licenzaValore personalizzato fornitoRisultato renderizzato
Licenza viewer a pagamento validaNoPagina pulita
Licenza viewer a pagamento validaSìFiligrana personalizzata
Licenza Temporanea/Demo attivaNoPagina pulita
Licenza Temporanea/Demo attivaSìFiligrana personalizzata
Licenza mancante, rifiutata, scaduta, versione errata o dominio non validoEntrambiFiligrana di valutazione; il valore personalizzato non la sostituisce

La stessa decisione si applica alle pagine servite e alle esportazioni di annotazioni. Una filigrana personalizzata è una funzionalità di un'applicazione con licenza, non un modo per sostituire la filigrana di valutazione.

API delle Annotazioni

Caricamento e esportazione di annotazioni lato server. La guida è in Annotazioni.

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 integrate in C# nella sessione
void LoadAnnotationData(string token, string annotationData)Carica l'involucro codificato restituito 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

DICOM metadata

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

In questo pacchetto restituisce sempre null, e la richiesta di metadati del widget risponde 501 Not Implemented: la lettura dei tag DICOM non è disponibile su .NET Framework. Il rendering DICOM — pagine, fotogrammi e animazione — funziona. Vedi DICOM Plugin.

Helper di risorse — ReferenceCss / ReferenceScripts

Emetti i tag <link> e <script> per le risorse che il modulo di risorse serve sotto DoconutOptions.ResourcesPath, in ordine di dipendenza. I file per le funzionalità soggette a licenza (Search, Annotation) vengono emessi solo quando la licenza le concede.

text
string ReferenceCss(CssConfig? config = null)       // null → Bootstrap + visualizzatore + ricerca + annotazione
string ReferenceScripts(ScriptConfig? config = null)
bool IsSearchEnabled { get; }                       // stato della licenza, per proteggere il codice di inizializzazione del ribbon
bool IsAnnotationEnabled { get; }

CssConfig flag: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (search-gated), IncludeAnnotationCss (annotation-gated).

ScriptConfig flag: IncludeJQuery (richiesto da tutti gli altri), IncludeBootstrap, IncludeViewerScripts (gli script principali del visualizzatore), IncludeSearchScripts e IncludeSearchBar (search-gated), IncludeAnnotationScripts e IncludeAnnotationBar (annotation-gated).

Entrambi restituiscono HTML: scrivili con @Html.Raw(...) in MVC 5 (generali nel controller — le view non hanno @inject) o <%= %> in Web Forms. Quick Start mostra entrambi.

RenderViewer

text
string RenderViewer(string elementId, string token, ViewerConfig? config = null)

Restituisce un blocco <script> che inizializza il widget sull'elemento con id elementId e mostra il documento: docViewer({...}) costruito dal ViewerConfig (predefinito: BasePath: '/', ResPath: 'doconut-res/images'), poi .View(token). Scrivilo dopo gli script del visualizzatore. Lo script generato non mantiene alcun riferimento all'oggetto del visualizzatore, quindi una pagina con la propria barra degli strumenti dovrebbe inizializzare il widget manualmente. Vedi ViewerConfig.

Web farm

string? AccessToken contiene il ticket firmato emesso dall'ultima apertura quando la modalità distribuita è attiva e UnsafeMode è false; è null su un singolo server. Invialo al widget con il token: objViewer.View(token, access).

Questa pagina è stata utile?