Конфигурация среды – Aspose.SVG for .NET
Настройка конфигурации среды используется для различных целей. Например, когда вы разрабатываете приложение, вам обязательно потребуется некоторая конфигурация, которая может варьироваться от службы времени выполнения или обработки любых веб-запросов из приложения до внедрения пользовательских тем.
В этом руководстве вы узнаете, как создавать различные конфигурации и адаптировать их к различным средам, в которых работает приложение. Это может быть пользовательская тема, служба времени выполнения или сетевая служба веб-запросов.
Пространство имен Aspose.Svg.Services содержит набор интерфейсов для реализации отдельных сервисов. В этой статье рассматриваются различные типы служб настройки среды, такие как Служба пользовательского агента, Служба выполнения и Сетевая служба. Aspose.SVG для .NET предоставляет класс Configuration, который можно использовать для настройки среды, в которой работает приложение.
Служба пользовательского агента – User Agent Service
User Agent Service позволяет указать пользовательскую таблицу стилей, основной набор символов для документа, настройки языка и шрифтов. Вы можете выбрать информацию о собственном стиле для конкретного документа и внести столько изменений в конфигурацию среды, сколько необходимо.
Интерфейс IUserAgentService описывает среду пользовательского агента.
Свойство
UserStyleSheet
интерфейса IUserAgentService позволяет указать информацию о стиле для конкретного документа;Свойство
CharSet
устанавливает основной набор символов для документа.Чтобы правильно проанализировать и отобразить документ SVG, приложение должно знать, какая кодировка используется. Если кодировка символов не указана напрямую в заголовке документа, Aspose.SVG использует UTF-8, который определен по умолчанию. Однако если вы уверены, что ваш SVG-документ написан с использованием кодировки, отличной от UTF-8, вы можете указать ее вручную, как показано в примере выше.
Свойство
FontsSettings
используется для настройки обработки шрифтов. Если вам нужно использовать пользовательские шрифты вместо шрифтов, установленных в ОС, вы можете указать путь к своей пользовательской папке, как показано в следующем фрагменте кода.Свойство
CSSEngineMode
получает или устанавливает режим работы CSS-движка.Свойство
Language
определяет основной язык содержимого элемента и любого атрибута элемента, содержащего текст.
Рассмотрим пример, иллюстрирующий применение свойств UserStyleSheet
, CharSet
и FontsSettings
:
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving;
6...
7
8 // Prepare SVG code and save it to a file
9 var code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
10 " <circle cx=\"40\" cy=\"80\" r=\"30\" />\r\n" +
11 " <text x=\"80\" y=\"100\">Aspose.SVG</text>\r\n" +
12 "</svg>\r\n";
13
14 File.WriteAllText(Path.Combine(OutputDir, "user-agent.svg"), code);
15
16 // Create an instance of Configuration
17 using (var configuration = new Configuration())
18 {
19 // Get the IUserAgentService
20 var userAgentService = configuration.GetService<IUserAgentService>();
21
22 // Set a custom style parameters for the "circle" and "text" elements
23 userAgentService.UserStyleSheet = "circle { fill:silver; }\r\n" +
24 "text { fill:DarkCyan; font-size:3em; }\r\n";
25
26 // Set ISO-8859-1 encoding to parse a document
27 userAgentService.CharSet = "ISO-8859-1";
28
29 // Set a custom font folder path
30 userAgentService.FontsSettings.SetFontsLookupFolder(Path.Combine(DataDir + "fonts"));
31
32 // Initialize an SVG document with specified configuration
33 using (var document = new SVGDocument(Path.Combine(OutputDir, "user-agent.svg"), configuration))
34 {
35 // Convert SVG to PDF
36 Converter.ConvertSVG(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent.pdf"));
37 }
38 }
На рисунке показан результат применения User Agent Service (b) к исходному файлу user-agent.svg (a).
Служба выполнения – Runtime Service
При планировании запуска приложения вам может потребоваться конфигурация службы времени выполнения. Этот сервис дает вам контроль над временем жизни внутренних процессов. Например, используя IRuntimeService вы можете указать таймауты для JavaScript. Наличие такого таймаута важно в том случае, если скрипт содержит бесконечный цикл. Следующий фрагмент кода демонстрирует, как использовать таймауты.
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving;
6...
7
8 // Prepare SVG code and save it to a file
9 var code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
10 " <script> while(true) {} </script>\r\n" +
11 " <circle cx=\"40\" cy=\"80\" r=\"30\" />\r\n" +
12 "</svg>\r\n";
13
14 File.WriteAllText(Path.Combine(OutputDir, "runtime.svg"), code);
15
16 // Create an instance of Configuration
17 using (var configuration = new Configuration())
18 {
19 // Limit JS execution time to 5 seconds
20 var runtimeService = configuration.GetService<IRuntimeService>();
21 runtimeService.JavaScriptTimeout = TimeSpan.FromSeconds(5);
22
23 // Initialize an SVG document with specified configuration
24 using (var document = new SVGDocument(Path.Combine(OutputDir, "runtime.svg"), configuration))
25 {
26 // Convert SVG to PNG
27 Converter.ConvertSVG(document, new ImageSaveOptions(), Path.Combine(OutputDir, "runtime.png"));
28 }
29 }
Свойство JavaScriptTimeout
устанавливает параметр TimeSpan
, который ограничивает время выполнения JavaScript. Если скрипт выполняется дольше, чем указано в TimeSpan
, он будет отменен. Значение по умолчанию – 1 минута.
Сетевая служба – Network Service
Современные сетевые среды генерируют значительное количество событий безопасности и регистрируют данные через сетевые маршрутизаторы и коммутаторы, серверы, системы защиты от вредоносных программ и т. д.
Aspose.SVG for .NET предлагает INetworkService, который задуман как решение, помогающее управлять и анализировать всю эту информацию. Сервис позволяет вам контролировать весь входящий/исходящий трафик и реализовывать собственные обработчики сообщений. Его можно использовать для различных целей, например для создания собственного механизма кэширования, отслеживания/регистрации сообщений запросов и т. д.
Создайте собственный обработчик сообщений
Aspose.SVG для .NET предлагает функциональные возможности для создания пользовательских обработчиков сообщений. Давайте разработаем простой собственный обработчик, который записывает информацию о недоступных ресурсах. Выполните следующие шаги:
- Используйте необходимое пространство имен, то есть Aspose.Svg.Net. Это пространство имен представлено классами и интерфейсами, которые отвечают за упрощение сетевой обработки.
- Чтобы создать собственный обработчик сообщений, вам необходимо определить собственный класс, который будет производным от класса MessageHandler. Мы создаем класс LogMessageHandler.
- Переопределите метод Invoke() класса MessageHandler, чтобы реализовать собственное поведение обработчика сообщений.
В следующем примере показано, как создать LogMessageHandler для регистрации информации о недоступных ресурсах.
1using Aspose.Svg.Net;
2using System.Collections.Generic;
3using System.Net;
4...
5
6 // Define LogMessageHandler that is derived from the MessageHandler class
7 public class LogMessageHandler : MessageHandler
8 {
9 private List<string> errors = new List<string>();
10
11 public List<string> ErrorMessages
12 {
13 get { return errors; }
14 }
15
16 // Override the Invoke() method
17 public override void Invoke(INetworkOperationContext context)
18 {
19 // Check whether response is OK
20 if (context.Response.StatusCode != HttpStatusCode.OK)
21 {
22 // Set error information
23 errors.Add(string.Format("File '{0}' Not Found", context.Request.RequestUri));
24 }
25
26 // Invoke the next message handler in the chain
27 Next(context);
28 }
29 }
Дополнительную информацию о создании пользовательских обработчиков сообщений вы найдете в главе Обработчики сообщений.
Используйте LogMessageHandler для регистрации информации о недоступных ресурсах
В следующем примере показано, как использовать класс LogMessageHandler для регистрации информации о недоступных ресурсах.
1using System.IO;
2using Aspose.Svg;
3using Aspose.Svg.Services;
4using Aspose.Svg.Converters;
5using Aspose.Svg.Saving;
6using Aspose.Svg.Net;
7...
8
9 // Prepare SVG code and save it to a file
10 var code = "<svg xmlns=\"http://www.w3.org/2000/svg\">\r\n" +
11 " <image href=\"https://docs.aspose.com/svg/images/drawing/park.jpg\" width=\"640px\" height=\"480px\" />\r\n" +
12 " <image href=\"https://docs.aspose.com/svg/net/missing1.svg\" width=\"400px\" height=\"300px\" />\r\n" +
13 " <image href=\"https://docs.aspose.com/svg/net/missing2.svg\" width=\"400px\" height=\"300px\" />\r\n" +
14 "</svg>\r\n";
15
16 File.WriteAllText(Path.Combine(OutputDir, "network.svg"), code);
17
18 // Create an instance of the Configuration class
19 using (var configuration = new Configuration())
20 {
21 // Add LogMessageHandler to the chain of existing message handlers for logging errors
22 var networkService = configuration.GetService<INetworkService>();
23
24 var logHandler = new LogMessageHandler();
25 networkService.MessageHandlers.Add(logHandler);
26
27 // Initialize an SVG document with specified configuration
28 using (var document = new SVGDocument(Path.Combine(OutputDir, "network.svg"), configuration))
29 {
30 // Convert SVG to PNG
31 Converter.ConvertSVG(document, new ImageSaveOptions(), Path.Combine(OutputDir, "network.png"));
32
33 // Print the List of ErrorMessages
34 foreach (string errorMessage in logHandler.ErrorMessages)
35 {
36 Console.WriteLine(errorMessage);
37 }
38 }
39 }
После запуска примера:
- созданный файл “network.svg” будет конвертирован в PNG. В файле только одно изображение;
- Будет напечатан список
ErrorMessages
:
File 'https://docs.aspose.com/svg/net/missing1.svg' Not Found
File 'https://docs.aspose.com/svg/net/missing2.svg' Not Found
Вы можете загрузить полные примеры и файлы данных с GitHub. О загрузке с GitHub и запуске примеров вы узнаете из раздела Как запускать примеры.