Configuración del entorno – Aspose.SVG for .NET
La configuración del entorno se utiliza para diversos fines. Por ejemplo, cuando desarrolle una aplicación, definitivamente exigirá alguna configuración que puede variar desde el servicio de tiempo de ejecución o manejar cualquier solicitud web de la aplicación hasta la inyección de temas personalizados.
En esta guía aprenderá a crear diversas configuraciones y adaptarlas a los diferentes entornos donde se ejecuta la aplicación. Puede ser un tema personalizado, un servicio de ejecución o un servicio de red de solicitud web.
El espacio de nombres Aspose.Svg.Services contiene un conjunto de interfaces para implementaciones de servicios separados. Este artículo considera diferentes tipos de servicios de configuración del entorno, como User Agent Service, Runtime Service y Network Service. Aspose.SVG for .NET proporciona la clase Configuración que se puede utilizar para configurar el entorno donde se ejecuta la aplicación.
Puede descargar los ejemplos completos y los archivos de datos desde GitHub. Encontrará información sobre cómo descargar desde GitHub y ejecutar ejemplos en la sección Cómo ejecutar los ejemplos.
Servicio de agente de usuario – User Agent Service
El User Agent Service le permite especificar una hoja de estilo de usuario personalizada, un conjunto de caracteres principal para el documento, el idioma y la configuración de fuentes. Puede seleccionar su información de estilo personalizada para un documento en particular y proporcionar tantos cambios de configuración del entorno como sean necesarios.
La interfaz IUserAgentService describe un entorno de agente de usuario.
La propiedad
UserStyleSheetde la interfaz IUserAgentService permite especificar información de estilo para un documento en particular;La propiedad
CharSetestablece el juego de caracteres principal de un documento.Para analizar y mostrar un documento SVG correctamente, la aplicación debe saber qué codificación está utilizando. Si la codificación de caracteres no se especifica directamente en el encabezado del documento, Aspose.SVG usa UTF-8, que está definido como predeterminado. Sin embargo, si está seguro de que su documento SVG está escrito con una codificación diferente a la UTF-8, puede especificarla manualmente, como se muestra en el ejemplo anterior.
La propiedad
FontsSettingsse utiliza para la configuración del manejo de fuentes. Cuando necesite utilizar fuentes personalizadas en lugar de las fuentes instaladas en el sistema operativo, puede establecer la ruta a su carpeta personalizada, como se muestra en el siguiente fragmento de código.La propiedad
CSSEngineModeobtiene o establece el modo en el que funciona el motor CSS.La propiedad
Languageespecifica el idioma principal del contenido del elemento y de cualquiera de los atributos del elemento que contienen texto.
Considere un ejemplo que ilustra la aplicación de las propiedades UserStyleSheet, CharSet y FontsSettings:
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving; 1// Set custom user agent, styles, charset, and fonts for SVG conversion to PDF in C#
2
3// Prepare SVG code and save it to a file
4string code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
5 " <circle cx=\"40\" cy=\"80\" r=\"30\" />\r\n" +
6 " <text x=\"80\" y=\"100\">Aspose.SVG</text>\r\n" +
7 "</svg>\r\n";
8
9File.WriteAllText(Path.Combine(OutputDir, "user-agent.svg"), code);
10
11// Create an instance of the Configuration class
12using (Configuration configuration = new Configuration())
13{
14 // Get the IUserAgentService
15 IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
16
17 // Set a custom style parameters for <circle> and <text> elements
18 userAgentService.UserStyleSheet = "circle { fill:silver; }\r\n" +
19 "text { fill:DarkCyan; font-size:3em; }\r\n";
20
21 // Set ISO-8859-1 encoding to parse a document
22 userAgentService.CharSet = "ISO-8859-1";
23
24 // Set a custom font folder path
25 userAgentService.FontsSettings.SetFontsLookupFolder(Path.Combine(DataDir + "fonts"));
26
27 // Initialize an SVG document with specified configuration
28 using (SVGDocument document = new SVGDocument(Path.Combine(OutputDir, "user-agent.svg"), configuration))
29 {
30 // Convert SVG to PDF
31 Converter.ConvertSVG(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent.pdf"));
32 }
33}La figura ilustra el resultado de User Agent Service aplicando (b) al archivo fuente “user-agent.svg” (a).

Servicio de tiempo de ejecución – Runtime Service
Cuando planee ejecutar su aplicación, es posible que necesite una configuración del servicio de tiempo de ejecución. Este servicio le brinda control sobre la vida útil de los procesos internos. Por ejemplo, utilizando IRuntimeService puede especificar tiempos de espera para JavaScripts. Es importante tener dicho tiempo de espera en caso de que un script contenga un bucle sin fin. El siguiente fragmento de código demuestra cómo utilizar los tiempos de espera.
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving; 1// Limit JavaScript execution time in SVG before conversion to PNG in C#
2
3// Prepare SVG code and save it to a file
4string code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
5 " <script> while(true) {} </script>\r\n" +
6 " <circle cx=\"40\" cy=\"80\" r=\"30\" />\r\n" +
7 "</svg>\r\n";
8
9File.WriteAllText(Path.Combine(OutputDir, "runtime.svg"), code);
10
11// Create an instance of the Configuration class
12using (Configuration configuration = new Configuration())
13{
14 // Limit JS execution time to 5 seconds
15 IRuntimeService runtimeService = configuration.GetService<IRuntimeService>();
16 runtimeService.JavaScriptTimeout = TimeSpan.FromSeconds(5);
17
18 // Initialize an SVG document with specified configuration
19 using (SVGDocument document = new SVGDocument(Path.Combine(OutputDir, "runtime.svg"), configuration))
20 {
21 // Convert SVG to PNG
22 Converter.ConvertSVG(document, new ImageSaveOptions(), Path.Combine(OutputDir, "runtime.png"));
23 }
24}La propiedad JavaScriptTimeout establece TimeSpan, que limita el tiempo de ejecución de JavaScript. Si el script se ejecuta durante más tiempo del TimeSpan proporcionado, se cancelará. El valor predeterminado es 1 minuto.
Servicio de red – Network Service
Los entornos de red modernos generan una cantidad significativa de eventos de seguridad y registran datos a través de enrutadores y conmutadores de red, servidores, sistemas antimalware, etc.
Aspose.SVG for .NET ofrece INetworkService que se concibe como una solución para ayudar a gestionar y analizar toda esta información. El servicio le permite controlar todo el tráfico entrante/saliente e implementar sus controladores de mensajes personalizados. Se puede utilizar para diferentes propósitos, como crear un mecanismo de almacenamiento en caché personalizado, rastrear/registro de mensajes de solicitud, etc.
Crear un controlador de mensajes personalizado
Aspose.SVG for .NET ofrece funcionalidad para la creación de controladores de mensajes personalizados. Desarrollemos un controlador personalizado simple que registre información sobre recursos inalcanzables. Tome los siguientes pasos:
- Utilice el espacio de nombres necesario, que es Aspose.Svg.Net. Este espacio de nombres se presenta mediante clases e interfaces, que son responsables de facilitar el procesamiento de la red.
- Para crear un controlador de mensajes personalizado, debe definir su propia clase que se derivará de la clase MessageHandler. Construimos una clase LogMessageHandler.
- Anule el método Invoke() de la clase MessageHandler para implementar el comportamiento personalizado del controlador de mensajes.
El siguiente ejemplo demuestra cómo crear LogMessageHandler para registrar información sobre recursos inaccesibles.
1using Aspose.Svg.Net;
2using System.Collections.Generic;
3using System.Net; 1// Сustom network message handler to log HTTP errors during SVG processing
2
3// Define LogMessageHandler that is derived from the MessageHandler class
4public class LogMessageHandler : MessageHandler
5{
6 private List<string> errors = new List<string>();
7
8 public List<string> ErrorMessages
9 {
10 get { return errors; }
11 }
12
13 // Override the Invoke() method
14 public override void Invoke(INetworkOperationContext context)
15 {
16 // Check whether response is OK
17 if (context.Response.StatusCode != HttpStatusCode.OK)
18 {
19 // Set error information
20 errors.Add(string.Format("File '{0}' Not Found", context.Request.RequestUri));
21 }
22
23 // Invoke the next message handler in the chain
24 Next(context);
25 }
26}Para obtener más información sobre la creación de controladores de mensajes personalizados, consulte el capítulo Controladores de mensajes.
Utilice LogMessageHandler para registrar información sobre recursos inaccesibles
El siguiente ejemplo demuestra cómo utilizar la clase LogMessageHandler para registrar información sobre recursos inalcanzables.
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving;
6using Aspose.Svg.Net; 1// Log network errors when loading external images in SVG and convert to PNG
2
3// Prepare SVG code and save it to a file
4string code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
5 " <image href=\"https://docs.aspose.com/svg/images/drawing/park.jpg\" width=\"640px\" height=\"480px\" />\r\n" +
6 " <image href=\"https://docs.aspose.com/svg/net/missing1.svg\" width=\"400px\" height=\"300px\" />\r\n" +
7 " <image href=\"https://docs.aspose.com/svg/net/missing2.svg\" width=\"400px\" height=\"300px\" />\r\n" +
8 "</svg>\r\n";
9
10File.WriteAllText(Path.Combine(OutputDir, "network.svg"), code);
11
12// Create an instance of the Configuration class
13using (Configuration configuration = new Configuration())
14{
15 // Add LogMessageHandler to the chain of existing message handlers
16 INetworkService networkService = configuration.GetService<INetworkService>();
17
18 LogMessageHandler logHandler = new LogMessageHandler();
19 networkService.MessageHandlers.Add(logHandler);
20
21 // Initialize an SVG document with specified configuration
22 using (SVGDocument document = new SVGDocument(Path.Combine(OutputDir, "network.svg"), configuration))
23 {
24 // Convert SVG to PNG
25 Converter.ConvertSVG(document, new ImageSaveOptions(), Path.Combine(OutputDir, "network.png"));
26
27 // Print the List of ErrorMessages
28 foreach (string errorMessage in logHandler.ErrorMessages)
29 {
30 Console.WriteLine(errorMessage);
31 }
32 }
33}Después de ejecutar el ejemplo:
- el archivo creado “network.svg” se convertirá a PNG. Sólo hay una imagen en el archivo;
- Se imprimirá la Lista de
Mensajes de error:
File 'https://docs.aspose.com/svg/net/missing1.svg' Not FoundFile 'https://docs.aspose.com/svg/net/missing2.svg' Not Found
Puede descargar los ejemplos completos y los archivos de datos desde GitHub. Encontrará información sobre la descarga desde GitHub y la ejecución de ejemplos en la sección Cómo ejecutar los ejemplos.