Configurazione in .NET 6 o versioni successive

File Startup.cs

Nell file Startup.cs di un progetto .NET Core, queste righe di codice definiscono una configurazione della pipeline middleware utilizzando il metodo MapWhen. Il predicato fornito verifica se il percorso della richiesta in ingresso termina con DocImage.axd. All'interno di questo blocco, viene chiamato il metodo UseDoconut con un oggetto DoconutOptions come argomento.

Startup.cs
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

Aggiungi gli spazi dei nomi Doconut

Nel tuo progetto, aggiungi le seguenti istruzioni using:

Aggiungi gli spazi dei nomi Doconut
using Doconut;
using Doconut.Configs;
using Doconut.Clouds;

Istanzia l'oggetto Viewer

Questa riga istanzia una nuova istanza della classe Viewer, consentendoti di creare un oggetto viewer nel tuo codice.

Istanzia l'oggetto Viewer
// License is configured via AddDoconut; obtain the viewer from DI.
var docViewer = app.Services.GetRequiredService<Viewer>();

Configura un oggetto DocOptions

Esempio di inizializzazione di un oggetto DocOptions con configurazioni specifiche:

DocOptions
```csharp
// Document opening options – password and session timeout
var docOptions = new DocOptions
{
    Password = string.Empty,
    TimeOut = 30
};

// Per‑format rendering options – set image resolution via the format‑specific config
var pdfConfig = new PdfConfig
{
    ImageResolution = 200
};
```

Configura un oggetto di configurazione

Inizializza un nuovo oggetto PdfConfig con configurazioni specifiche per la gestione dei documenti PDF:

PdfConfig
var config = new PdfConfig { DefaultRender = true, ExtractHyperlinks = true };

Apri il tuo documento

Questa riga invoca il metodo OpenDocument dell'oggetto viewer, passando il percorso del file documento situato sul server e gli oggetti PdfConfig e DocOptions precedentemente configurati come parametri.

OpenDocument
var token = await viewer.OpenDocumentAsync(path, new PdfConfig
{
    AllowSearch = true,
    AllowCopy   = true,
    ImageResolution = 150
});

Aggiungi il viewer nel tuo HTML

HTML
<div id="div_ctlDoc"></div>

Aggiungi i file CSS e JavaScript

Aggiungi i seguenti file CSS e JavaScript nella pagina. Questi script sono inclusi nel file ZIP con esempi di codice.

Aggiungi i file CSS e JavaScript
<!-- Main Viewer Related Scripts -->
<script src="scripts/splitter.js"></script>
<script src="scripts/docViewer.js"></script>
<script src="scripts/documentLinks.js"></script>

<!-- Viewer functions -->
<script src="scripts/docViewer.UI.js?v=1"></script>

Aggiungi le licenze al tuo progetto

Rilevamento automatico delle licenze

Per inizializzare il docViewer con il rilevamento automatico delle licenze, usa la seguente riga:

C#
app.MapPost("/api/open", async (Viewer viewer) =>
{
    // The token is opaque — hand it to the widget, never log or persist it.
    string token = await viewer.OpenDocumentAsync("wwwroot/files/Sample.pdf");
    return Results.Ok(new { token });
});

Aggiungi licenza predefinita manuale

Puoi specificare manualmente il percorso a un singolo file di licenza predefinita durante l'inizializzazione del viewer.

C#
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Aggiungi licenza tramite stream

Questo metodo utilizza il sovraccarico Viewer.DoconutLicense(Stream licenseStream) per aggiungere una licenza usando uno stream.

C#
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Aggiungi licenza tramite documento XML

Questo metodo utilizza il sovraccarico Viewer.DoconutLicense(XMLDocument licence) per aggiungere una licenza usando un documento XML.

C#
// License XML from a database, environment variable, or secret manager —
// no file on disk. Beaten only by LicenseStream.
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Licenze plugin multiple predefinite manuali

Se hai bisogno di specificare più licenze, puoi fornire un elenco di percorsi file all'inizializzazione del viewer.

C#
builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddDistributedMemoryCache(); // session state needs a cache (MVC/Razor Pages already add one)
builder.Services.AddSession(); // Doconut document security rides on ASP.NET session state

app.UseSession();          // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();

Aggiungi licenza plugin tramite stream

Questo metodo utilizza il sovraccarico Viewer.SetLicensePlugin(Stream pluginLicence) per aggiungere una licenza plugin usando uno stream.

C#
using var pluginLicenseStream = new FileStream("path/to/your/plugin-license.lic", FileMode.Open);

builder.Services.AddDoconut(options =>
{
    // The stream takes precedence over LicenseContent, LicensePath, and auto‑search.
    options.LicenseStream = pluginLicenseStream;
});

Aggiungi licenza plugin tramite documento XML

Questo metodo utilizza il sovraccarico Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) per aggiungere una licenza plugin usando un documento XML.

C#
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Pacchetti NuGet richiesti

Per garantire che il tuo progetto sia pienamente compatibile con .NET Core Standard, è necessario includere i seguenti pacchetti NuGet, elencati in ordine alfabetico.

  • MessagePack - Version 2.5.140
  • Microsoft.Bcl.AsyncInterfaces - Version 8.0.0
  • Microsoft.Extensions.Caching.Abstractions - Version 8.0.0
  • Microsoft.Extensions.Configuration - Version 8.0.0
  • Microsoft.Extensions.Configuration.Abstractions - Version 8.0.0
  • Microsoft.Extensions.Configuration.FileExtensions - Version 8.0.0
  • Microsoft.Extensions.Configuration.Json - Version 8.0.0
  • Microsoft.Extensions.FileProviders.Abstractions - Version 8.0.0
  • Microsoft.Extensions.FileProviders.Physical - Version 8.0.0
  • Microsoft.Extensions.FileSystemGlobbing - Version 8.0.0
  • Microsoft.Extensions.Primitives - Version 8.0.0
  • System.Buffers - Version 4.5.1
  • System.Formats.Asn1 - Version 8.0.0
  • System.Numerics.Vectors - Version 4.5.0
  • System.Security.Cryptography.Cng - Version 5.0.0
  • System.Security.Cryptography.Pkcs - Version 8.0.0
  • System.Text.Encoding.CodePages - Version 8.0.0
  • System.Text.Encodings.Web - Version 8.0.0
  • System.Text.Json - Version 8.0.3
  • System.Threading.Tasks.Extensions - Version 4.5.4

Opzioni di configurazione del rendering

Puoi configurare il comportamento del rendering usando le seguenti opzioni:

  • CadConfig: Utilizzato per file DWG, DXF e DGN.
  • EmailConfig: Utilizzato per file EML, EMLX e MSG.
  • EpubConfig: Utilizzato per file EPUB.
  • ExcelConfig: Utilizzato per file Excel e CSV.
  • MhtConfig: Utilizzato per file MHT.
  • PptConfig: Utilizzato per file PowerPoint.
  • ProjectConfig: Utilizzato per file MPP.
  • PsdConfig: Utilizzato per file PSD.
  • TxtConfig: Utilizzato per file TXT.
  • TiffConfig: Utilizzato per file TIFF.

Configurazione delle opzioni di rendering

Le opzioni di rendering sono configurate usando la proprietà DefaultRender:

  • DefaultRender = true : Questa opzione offre un rendering di qualità superiore ma utilizza più memoria del server e tempo di elaborazione.
  • DefaultRender = false : Questa opzione fornisce un rendering più veloce a scapito di una leggera riduzione della qualità.

Come aggiungere un'annotazione immagine

In C#

1. Apri il documento e ottieni le dimensioni della prima pagina. 2. Inizializza l'AnnotationManager con le dimensioni della pagina. 3. Crea un ImageAnnotation, impostando il percorso dell'immagine in imgUrl, e specifica la posizione e le dimensioni all'interno di Rectangle. 4. Aggiungi l'annotazione al manager e caricala nel visualizzatore di documenti per visualizzarla.

C#
var token = await viewer.OpenDocumentAsync(pathToFile, config, documentOptions);

// The annotation manager is automatically bound to the opened document's page dimensions.
using var annMgr = viewer.GetAnnotationManager(token);

var imgAnn = new ImageAnnotation(
    1,
    new Rectangle(600, 700, 750, 300),
    "img/sample.png"
);

annMgr.Add(imgAnn);
viewer.LoadAnnotationData(token, annMgr);

In JavaScript

1. Assicurati che YourController sia disponibile. 2. Crea un nuovo ImageAnnotation, impostando il percorso dell'immagine con SetNote. 3. Aggiungi e dipingi l'annotazione per renderla sul documento.

JavaScript
function ImageStamp() {
    if (null != objctlDoc.YourController()) {
        var objStampImage = new ImageAnnotation({ left: 200, top: 200, width: 260, height: 55 });
        objctlDoc.YourController().AddAnnotation(null, objStampImage, null);

        objStampImage.SetNote('/images/Approved_Stamp.png');
        objStampImage.Paint();
    }
}

Font personalizzati nei documenti Word

La proprietà FontFolders nella classe WordConfig specifica directory personalizzate dove l'applicazione cercherà i font. Questo è particolarmente utile per elaborare documenti Word che dipendono da font non installati nelle directory di font predefinite del sistema.

Font personalizzati nei documenti Word
var config = new WordConfig
{
    FontFolders = new string[] { "C:\\CustomFonts", "D:\\SharedFonts" }
};

Aggiornamento importante per Doconut 25.2.0

È fondamentale aggiornare il pacchetto System.Text.Json alla versione 8.0.5 in tutti i tuoi progetti. Questo aggiornamento è cruciale per garantire la compatibilità con le ultime funzionalità e per affrontare importanti miglioramenti di sicurezza.

Codifica email

La proprietà EmailEncoding nella classe EmailConfig specifica la codifica preferita sia per l'oggetto che per il corpo dell'email.

Codifica email
var emailConfig = new EmailConfig {
    EmailEncoding = Encoding.UTF8 // Set preferred email encoding
};

Codifica oggetto e corpo

Le proprietà SubjectEncoding e BodyEncoding nella classe EmailConfig definiscono la codifica utilizzata rispettivamente per l'oggetto e il corpo di un'email.

Codifica oggetto e corpo
var emailConfig = new EmailConfig {
    SubjectEncoding = Encoding.UTF8, // Set encoding for the subject
    BodyEncoding = Encoding.UTF8     // Set encoding for the body
};

Supporto alla cultura del visualizzatore Word

La proprietà DocumentCulture nella classe WordConfig consente di definire esplicitamente la cultura per i file DOC e DOCX. Ciò garantisce che i contenuti localizzati — come date, valute e numeri — vengano visualizzati esattamente come avviene in Microsoft Word. Questo è particolarmente utile per le lingue con requisiti di formattazione specifici.

Supporto alla cultura del visualizzatore Word
var config = new WordConfig { DocumentCulture = "he-IL" }; // Hebrew (Israel)
var config = new WordConfig { DocumentCulture = "ar-SA" }; // Arabic (Saudi Arabia)
var config = new WordConfig { DocumentCulture = "th-TH" }; // Thai (Thailand)
var config = new WordConfig { DocumentCulture = "ja-JP" }; // Japanese (Japan)