Configuración en .NET Standard / Core
Archivo Startup.cs
Dentro del archivo Startup.cs de un proyecto .NET Core, estas líneas de código definen una configuración de canalización de middleware usando el método MapWhen. El predicado proporcionado verifica si la ruta de la solicitud entrante termina con DocImage.axd. Dentro de este bloque, se llama al método UseDoconut con un objeto DoconutOptions como argumento.
app.MapWhen(
context => context.Request.Path.ToString().EndsWith("DocImage.axd"),
appBranch =>
{
appBranch.UseDoconut(new DoconutOptions { UnsafeMode = false, ShowDoconutInfo = false });
}
);Agregar espacios de nombres Doconut
En su proyecto, agregue las siguientes declaraciones using:
using Doconut;
using Doconut.Configs;
using Doconut.Clouds;
// TODO: implement licence loading, viewer registration, document opening, conversion using current APIInstanciar objeto Viewer
Esta línea instancia una nueva instancia de la clase Viewer, permitiéndole crear un objeto viewer dentro de su código.
// Viewer is injected; no explicit construction required in Doconut.NETStandard 26.9.0Configurar un objeto DocOptions
Ejemplo de inicialización de un objeto DocOptions con configuraciones específicas:
var documentOptions = new DocOptions
{
Password = "",
// ImageResolution is obsolete; omitted.
TimeOut = 30
};Configurar un objeto config
Inicialice un nuevo objeto PdfConfig con configuraciones específicas para manejar documentos PDF:
var config = new PdfConfig { DefaultRender = true, ExtractHyperlinks = true };Abrir su documento
Esta línea invoca el método OpenDocument del objeto viewer, pasando la ruta del archivo del documento ubicado en el servidor y los objetos PdfConfig y DocOptions previamente configurados como parámetros.
dynamic viewer = null;
var token = viewer.LoadDocument(path, null, null);Agregar el viewer en su HTML
<div id="div_ctlDoc"></div>Agregar archivos CSS y JavaScript
Agregue los siguientes archivos CSS y JavaScript en la página. Estos scripts están incluidos en el archivo ZIP con ejemplos de código.
<link rel="stylesheet" href="css/viewer.css" />
<!-- Main Viewer Related Scripts -->
<script src="scripts/jquery.min.js"></script>
<script src="scripts/docViewer.js"></script>
<script src="scripts/splitter.js"></script>
<script src="scripts/search.js"></script>
<script src="scripts/documentLinks.js"></script>
<!-- Viewer functions -->
<script src="scripts/docViewer.UI.js?v=1"></script>Agregar licencias a su proyecto
Detección automática de licencias
Para inicializar el docViewer con detección automática de licencias, use la siguiente línea:
```csharp
// Create a Viewer instance using the current API (no constructor arguments required).
var docViewer = new Viewer();
```Agregar licencia predeterminada manual
Puede especificar manualmente la ruta a un único archivo de licencia predeterminada al inicializar el viewer.
using System.IO;
using Microsoft.Extensions.DependencyInjection;
using Doconut;
var licenseFilePath = Path.Combine(builder.Environment.WebRootPath, "path/to/your/license");
var docViewer = app.Services.GetRequiredService<Viewer>();Agregar licencia por stream
Este método usa la sobrecarga Viewer.DoconutLicense(Stream licenseStream) para agregar una licencia usando un stream.
using System.IO;
using Doconut.Infrastructure.Licensing;
using (var licenseStream = new FileStream("path/to/your/license", FileMode.Open, FileAccess.Read))
{
var license = new DoconutLicense { DocBytes = new BinaryReader(licenseStream).ReadBytes((int)licenseStream.Length) };
}Agregar licencia por documento XML
Este método usa la sobrecarga Viewer.DoconutLicense(XMLDocument licence) para agregar una licencia usando un documento XML.
using System.Xml;
using Doconut.Infrastructure.Licensing;
var xmlDoc = new XmlDocument(); // load the license XML
xmlDoc.Load("path/to/your/license.xml");
var license = new DoconutLicense(); // instantiate license object (populate properties as needed)Licencias de complementos múltiples predeterminadas manuales
Si necesita especificar múltiples licencias, puede proporcionar una lista de rutas de archivos a la inicialización del viewer.
```csharp
// Prepare the paths to the viewer licence files (kept for reference; the current API loads them automatically)
var licenseFilePaths = new List<string>
{
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.lic"),
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.Annotation.lic"),
Path.Combine(_hostingEnvironment.WebRootPath, "Doconut.Viewer.Search.lic")
};
// The Viewer class no longer requires the licences in its constructor.
// Create an instance with the default constructor.
var docViewer = new Viewer();
// Open a document (e.g., a PDF) and obtain a token that represents the opened file.
string token = await docViewer.OpenDocumentAsync(
filePath: Path.Combine(_hostingEnvironment.WebRootPath, "sample.pdf"),
options: new DocOptions(),
ct: CancellationToken.None);
```Agregar licencia de complemento por stream
Este método usa la sobrecarga Viewer.SetLicensePlugin(Stream pluginLicence) para agregar una licencia de complemento usando un stream.
using (var pluginLicenseStream = new FileStream("path/to/your/plugin-license.lic", FileMode.Open))
{
// In Doconut.NETStandard 26.9.0 the license is supplied via the configuration
// passed to OpenDocumentAsync (BaseConfig), so the explicit SetLicensePlugin call
// is no longer required. Keep the license file accessible to the viewer or
// include it in your BaseConfig as shown in other samples.
}Agregar licencia de complemento por documento XML
Este método usa la sobrecarga Viewer.SetLicensePlugin(XMLDocument xmlPluginLicence) para agregar una licencia de complemento usando un documento XML.
// The license XML is discovered automatically by the viewer in Doconut.NETStandard 26.9.0.
// No explicit API call is required to register it.
string token = await Viewer.OpenDocumentAsync(
"path/to/your/document.pdf",
null, // DocOptions – use default settings
CancellationToken.None);Paquetes NuGet requeridos
Para asegurar que su proyecto sea totalmente compatible con .NET Core Standard, es necesario incluir los siguientes paquetes NuGet, listados en orden alfabético.
- 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
Opciones de configuración de renderizado
Puede configurar el comportamiento de renderizado usando las siguientes opciones:
- CadConfig: Usado para archivos DWG, DXF y DGN.
- EmailConfig: Usado para archivos EML, EMLX y MSG.
- EpubConfig: Usado para archivos EPUB.
- ExcelConfig: Usado para archivos Excel y CSV.
- MhtConfig: Usado para archivos MHT.
- PptConfig: Usado para archivos PowerPoint.
- ProjectConfig: Usado para archivos MPP.
- PsdConfig: Usado para archivos PSD.
- TxtConfig: Usado para archivos TXT.
- TiffConfig: Usado para archivos TIFF.
Configuración de opciones de renderizado
Las opciones de renderizado se configuran usando la propiedad DefaultRender:
- DefaultRender = true : Esta opción ofrece renderizado de mayor calidad pero usa más memoria del servidor y tiempo de procesamiento.
- DefaultRender = false : Esta opción proporciona renderizado más rápido a costa de una ligera reducción de calidad.
Cómo agregar una anotación de imagen
En C#
1. Abra el documento y obtenga las dimensiones de la primera página. 2. Inicialice el AnnotationManager con las dimensiones de la página. 3. Cree un ImageAnnotation, estableciendo la ruta de la imagen en imgUrl, y especifique la posición y el tamaño dentro de Rectangle. 4. Añada la anotación al manager y cárguela en el visor de documentos para mostrarla.
using Doconut.Annotations;
using System.Drawing;
// Placeholder: open the document and obtain page dimensions using the current Doconut.NETStandard API.
// Placeholder: create an annotation manager for the page size.
string imgUrl = "img/sample.png";
var imgAnn = new ImageAnnotation(
1,
new Rectangle(600, 700, 750, 300),
imgUrl
);
// Placeholder: add the annotation to the manager and load the annotation XML back into the viewer using the current API.En JavaScript
1. Asegúrese de que YourController esté disponible. 2. Cree un nuevo ImageAnnotation, estableciendo la ruta de la imagen con SetNote. 3. Añada y pinte la anotación para renderizarla en el documento.
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();
}
}Fuentes personalizadas en documentos Word
La propiedad FontFolders en la clase WordConfig especifica directorios personalizados donde la aplicación buscará fuentes. Esto es particularmente útil para procesar documentos Word que dependen de fuentes no instaladas en los directorios de fuentes predeterminados del sistema.
var config = new WordConfig
{
FontFolders = new string[] { "C:\\CustomFonts", "D:\\SharedFonts" }
};Actualización importante para Doconut 25.2.0
Es esencial actualizar el paquete System.Text.Json a la versión 8.0.5 en todos sus proyectos. Esta actualización es crucial para garantizar la compatibilidad con las últimas funciones y abordar importantes mejoras de seguridad.
Codificación de correo electrónico
La propiedad EmailEncoding en la clase EmailConfig especifica la codificación preferida tanto para el asunto como para el cuerpo del correo electrónico.
var emailConfig = new EmailConfig {
EmailEncoding = Encoding.UTF8 // Set preferred email encoding
};Codificación de asunto y cuerpo
Las propiedades SubjectEncoding y BodyEncoding en la clase EmailConfig definen la codificación utilizada para el asunto y el cuerpo de un correo electrónico, respectivamente.
var emailConfig = new EmailConfig {
SubjectEncoding = Encoding.UTF8, // Set encoding for the subject
BodyEncoding = Encoding.UTF8 // Set encoding for the body
};Soporte de cultura del visor de Word
La propiedad DocumentCulture en la clase WordConfig le permite definir explícitamente la cultura para archivos DOC y DOCX. Esto garantiza que el contenido localizado —como fechas, monedas y números— se renderice exactamente como lo hace en Microsoft Word. Esto es particularmente útil para idiomas con requisitos de formato específicos.
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)