Configuração no .NET 6 ou superior

Arquivo Startup.cs

Dentro do arquivo Startup.cs de um projeto .NET Core, estas linhas de código definem uma configuração de pipeline de middleware usando o método MapWhen. O predicado fornecido verifica se o caminho da solicitação entrante termina com DocImage.axd. Dentro deste bloco, o método UseDoconut é chamado com um objeto DoconutOptions como argumento.

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

Adicionar Namespaces Doconut

No seu projeto, adicione as seguintes instruções using:

Adicionar Namespaces Doconut
using Doconut;
using Doconut.Configs;
using Doconut.Clouds;

Instanciar objeto Viewer

Esta linha instancia uma nova instância da classe Viewer, permitindo que você crie um objeto viewer em seu código.

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

Configurar um objeto DocOptions

Exemplo de inicialização de um objeto DocOptions com configurações específicas:

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
};
```

Configurar um objeto config

Inicialize um novo objeto PdfConfig com configurações específicas para manipular documentos PDF:

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

Abrir seu documento

Esta linha invoca o método OpenDocument do objeto viewer, passando o caminho do arquivo de documento localizado no servidor e os objetos PdfConfig e DocOptions previamente configurados como parâmetros.

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

Adicionar o viewer no seu HTML

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

Adicionar arquivos CSS e JavaScript

Adicione os seguintes arquivos CSS e JavaScript na página. Esses scripts estão incluídos no arquivo ZIP com exemplos de código.

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

Adicionar Licenças ao Seu Projeto

Detecção Automática de Licença

Para inicializar o docViewer com detecção automática de licença, use a seguinte linha:

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

Adicionar Licença Padrão Manual

Você pode especificar manualmente o caminho para um único arquivo de licença padrão ao inicializar o viewer.

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

Adicionar Licença por Stream

Este método usa a sobrecarga Viewer.DoconutLicense(Stream licenseStream) para adicionar uma licença usando um stream.

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

Adicionar Licença por Documento XML

Este método usa a sobrecarga Viewer.DoconutLicense(XMLDocument licence) para adicionar uma licença usando um 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") ?? "";
});

Múltiplas Licenças de Plugin Padrão Manual

Se precisar especificar várias licenças, você pode fornecer uma lista de caminhos de arquivos para a inicialização do 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();

Adicionar Licença de Plugin por Stream

Este método usa a sobrecarga Viewer.SetLicensePlugin(Stream pluginLicence) para adicionar uma licença de plugin usando um 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;
});

Adicionar Licença de Plugin por Documento XML

Este método usa a sobrecarga Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) para adicionar uma licença de plugin usando um documento XML.

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

Pacotes NuGet Necessários

Para garantir que seu projeto seja totalmente compatível com .NET Core Standard, os seguintes pacotes NuGet precisam ser incluídos, listados em ordem alfabética.

  • 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

Opções de Configuração de Renderização

Você pode configurar o comportamento de renderização usando as seguintes opções:

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

Configuração de Opções de Renderização

As opções de renderização são configuradas usando a propriedade DefaultRender:

  • DefaultRender = true : Esta opção oferece renderização de alta qualidade, mas usa mais memória do servidor e tempo de processamento.
  • DefaultRender = false : Esta opção fornece renderização mais rápida ao custo de uma leve redução na qualidade.

Como Adicionar uma Anotação de Imagem

Em C#

1. Abra o documento e obtenha as dimensões da primeira página. 2. Inicialize o AnnotationManager com as dimensões da página. 3. Crie um ImageAnnotation, definindo o caminho da imagem em imgUrl, e especifique a posição e o tamanho dentro de Rectangle. 4. Adicione a anotação ao manager e carregue-a no visualizador de documentos para exibir.

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

Em JavaScript

1. Certifique-se de que YourController esteja disponível. 2. Crie um novo ImageAnnotation, definindo o caminho da imagem com SetNote. 3. Adicione e pinte a anotação para renderizá-la no 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();
    }
}

Fontes Personalizadas em documentos Word

A propriedade FontFolders na classe WordConfig especifica diretórios personalizados onde a aplicação buscará fontes. Isso é particularmente útil para processar documentos Word que dependem de fontes não instaladas nos diretórios padrão de fontes do sistema.

Fontes Personalizadas em documentos Word
var config = new WordConfig
{
    FontFolders = new string[] { "C:\\CustomFonts", "D:\\SharedFonts" }
};

Atualização Importante para Doconut 25.2.0

É essencial atualizar o pacote System.Text.Json para a versão 8.0.5 em todos os seus projetos. Esta atualização é crucial para garantir compatibilidade com os recursos mais recentes e para tratar melhorias importantes de segurança.

Codificação de Email

A propriedade EmailEncoding na classe EmailConfig especifica a codificação preferida tanto para o assunto quanto para o corpo do email.

Codificação de Email
var emailConfig = new EmailConfig {
    EmailEncoding = Encoding.UTF8 // Set preferred email encoding
};

Codificação de Assunto e Corpo

As propriedades SubjectEncoding e BodyEncoding na classe EmailConfig definem a codificação usada para o assunto e o corpo de um email, respectivamente.

Codificação de Assunto e Corpo
var emailConfig = new EmailConfig {
    SubjectEncoding = Encoding.UTF8, // Set encoding for the subject
    BodyEncoding = Encoding.UTF8     // Set encoding for the body
};

Suporte à Cultura do Visualizador de Word

A propriedade DocumentCulture na classe WordConfig permite definir explicitamente a cultura para arquivos DOC e DOCX. Isso garante que o conteúdo localizado — como datas, moedas e números — seja renderizado exatamente como no Microsoft Word. Isso é particularmente útil para idiomas com requisitos de formatação específicos.

Suporte à Cultura do Visualizador de 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)