Конфигурация среды – Environment Configuration C#

Часто полезно иметь разные конфигурации в зависимости от среды, в которой выполняется приложение. Например, вы можете настроить политику сценариев, переопределить стиль документа, применяя пользовательскую таблицу стилей, или обработать любые веб-запросы из приложения. Aspose.HTML предоставляет класс Configuration, который можно использовать именно для этих целей.

Песочница – Sandbox

Набор «sandboxing flag» – это набор из нуля или более флагов, которые используются для ограничения возможностей потенциально ненадежных ресурсов. Атрибут песочницы позволяет установить ряд ограничений на загружаемый во фрейм контент, например, блокировать формы и скрипты. Это повышает безопасность текущего документа, особенно когда документ загружается во фрейм из непроверенного источника.

В следующем примере показано, как пометить «Scripts» как ненадежный ресурс. В результате «Scripts» будут отключены во время выполнения приложения.

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5...
 6    // Prepare HTML code and save it to a file
 7    var code = "<span>Hello World!!</span> " +
 8               "<script>document.write('Have a nice day!');</script>";
 9
10    File.WriteAllText(Path.Combine(OutputDir, "sandboxing.html"), code);
11
12    // Create an instance of Configuration
13    using (var configuration = new Configuration())
14    {
15        // Mark 'scripts' as an untrusted resource
16        configuration.Security |= Sandbox.Scripts;
17
18        // Initialize an HTML document with specified configuration
19        using (var document = new HTMLDocument(Path.Combine(OutputDir, "sandboxing.html"), configuration))
20        {
21            // Convert HTML to PDF
22            Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "sandboxing_out.pdf"));
23        }
24    }

Сервисы – Services

Весь важный функционал сгруппирован в отдельные сервисы для удобства использования и расположен в пространстве имен Aspose.Html.Services.

Служба пользовательского агента – User Agent Service

User Agent Service позволяет указать настраиваемую таблицу стилей пользователя, основной набор символов для документа, настройки языка и шрифтов. Вы можете указать свою пользовательскую информацию о стиле для конкретного документа и внести столько изменений конфигурации среды, сколько необходимо. Интерфейс IUserAgentService описывает среду пользовательского агента.

Пользовательская таблица стилей – User Style Sheet

Пользователь может указать информацию пользовательского стиля для конкретного документа. Эта информация относится к документу в соответствии с cascading rules и может повлиять на представление документа. Следующий фрагмент кода показывает, как использовать свойство UserStyleSheet:

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5using Aspose.Html.Services;
 6...
 7    // Prepare HTML code and save it to a file
 8    var code = "<h1>User Agent Service </h1>\r\n" +
 9               "<p>The User Agent Service allows you to specify a custom user stylesheet, a primary character set for the document, language and fonts settings.</p>\r\n";
10
11    File.WriteAllText(Path.Combine(OutputDir, "user-agent-stylesheet.html"), code);
12
13    // Create an instance of Configuration
14    using (var configuration = new Configuration())
15    {
16        // Get the IUserAgentService
17        var userAgentService = configuration.GetService<IUserAgentService>();
18    
19        // Set the custom style parameters for the "h1" and "p" elements
20        userAgentService.UserStyleSheet = "h1 { color:#a52a2a;; font-size:2em;}\r\n" +
21                                          "p { background-color:GhostWhite; color:SlateGrey; font-size:1.2em; }\r\n";
22
23        // Initialize the HTML document with specified configuration
24        using (var document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-stylesheet.html"), configuration))
25        {
26            // Convert HTML to PDF
27            Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-stylesheet_out.pdf"));
28        }
29    }

Вы можете скачать полные примеры и файлы данных с GitHub..

Набор символов – Character Set

Свойство CharSet устанавливает первичный набор символов для документа. Чтобы правильно анализировать и отображать HTML-документ, приложение должно знать, какой набор символов (кодировка) используется для документа. Если кодировка символов не указана напрямую в заголовке документа, Aspose.HTML использует UTF-8, которая определена как кодировка по умолчанию для спецификации HTML5. Однако, если вы уверены, что ваш HTML-документ написан с использованием кодировки, отличной от UTF-8, вы можете указать ее вручную, как показано ниже.

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5using Aspose.Html.Services;
 6...
 7    // Prepare HTML code and save it to a file
 8    var code = "<h1>Character Set</h1>\r\n" +
 9               "<p>The <b>CharSet</b> property sets the primary character-set for a document.</p>\r\n";
10
11    File.WriteAllText(Path.Combine(OutputDir, "user-agent-charset.html"), code);
12    
13    // Create an instance of Configuration
14    using (var configuration = new Configuration())
15    {
16        // Get the IUserAgentService
17        var userAgentService = configuration.GetService<IUserAgentService>();
18    
19        // Set the custom style parameters for the "h1" and "p" elements
20        userAgentService.UserStyleSheet = "h1 { color:salmon; }\r\n" +
21                                          "p { background-color: #f0f0f0; color:DarkCyan; font-size:1.2em; }\r\n";
22
23        // Set ISO-8859-1 encoding to parse the document
24        userAgentService.CharSet = "ISO-8859-1";
25
26        // Initialize the HTML document with specified configuration
27        using (var document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-charset.html"), configuration))
28        {
29            // Convert HTML to PDF
30            Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-charset_out.pdf"));
31        }
32    }

В приведенном выше примере мы использовали свойства CharSet и UserStyleSheet для настройки кодировки ISO-8859-1 и пользовательского стиля.

Установить папку со шрифтами

Aspose.HTML – это мощная библиотека для работы с документами HTML в приложениях .NET. Он предоставляет широкий спектр функций, позволяющих разработчикам преобразовывать HTML-документы в различные выходные форматы, такие как PDF, XPS, DOCX и изображения. Одной из ключевых особенностей Aspose.HTML является его способность работать с пользовательскими шрифтами, что позволяет разработчикам добавлять свои собственные шрифты в процесс рендеринга. Свойство FontsSettings используется для настройки работы со шрифтами. Для ситуации, когда вам нужно использовать пользовательские шрифты вместо шрифтов, установленных в ОС, вы можете указать путь к своей пользовательской папке, как показано в следующем фрагменте кода:

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5using Aspose.Html.Services;
 6...
 7    // Prepare HTML code and save it to a file
 8    var code = "<h1>FontsSettings property</h1>\r\n" +
 9               "<p>The FontsSettings property is used for configuration of fonts handling.</p>\r\n";
10
11    File.WriteAllText(Path.Combine(OutputDir, "user-agent-fontsetting.html"), code);
12
13    // Create an instance of Configuration
14    using (var configuration = new Configuration())
15    {
16        // Get the IUserAgentService
17        var userAgentService = configuration.GetService<IUserAgentService>();
18
19        // Set the custom style parameters for the "h1" and "p" elements
20        userAgentService.UserStyleSheet = "h1 { color:#a52a2a; }\r\n" +
21                                          "p { color:grey; }\r\n";
22
23        // Set custom font folder path
24        userAgentService.FontsSettings.SetFontsLookupFolder(Path.Combine(DataDir + "fonts"));
25
26        // Initialize the HTML document with specified configuration
27        using (var document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-fontsetting.html"), configuration))
28        {
29            // Convert HTML to PDF
30            Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-fontsetting_out.pdf"));
31        }
32    }

Чтобы установить папку шрифта с помощью библиотеки Aspose.HTML для .NET, мы используем метод SetFontsLookupFolder() класса FontsSettings. Этот метод позволяет указать папку, в которой находятся пользовательские шрифты. Установив папку шрифтов, Aspose.HTML будет искать шрифты в указанной папке при рендеринге HTML-документа.

На рисунке показан результат применения свойств FontsSettings и UserStyleSheet (b) к исходному файлу «user-agent-fontsetting.html» (a).

Текст “Результат использования свойства FontsSettings”

Служба выполнения – Runtime Service

Эта служба дает вам контроль над временем жизни внутренних процессов. Например, с помощью IRuntimeService вы можете указать время ожидания для JavaScript. Важно иметь такой таймаут на случай, если скрипт содержит бесконечный цикл. Следующий фрагмент кода демонстрирует, как использовать тайм-ауты.

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5using Aspose.Html.Services;
 6...
 7    // Prepare HTML code and save it to a file
 8    var code = "<h1>Runtime Service</h1>\r\n" +
 9               "<script> while(true) {} </script>\r\n" +
10               "<p>The Runtime Service optimizes your system by helping it start apps and programs faster.</p>\r\n";
11
12    File.WriteAllText(Path.Combine(OutputDir, "runtime-service.html"), code);
13
14    // Create an instance of Configuration
15    using (var configuration = new Configuration())
16    {
17        // Limit JS execution time to 5 seconds
18        var runtimeService = configuration.GetService<IRuntimeService>();
19        runtimeService.JavaScriptTimeout = TimeSpan.FromSeconds(5);
20
21        // Initialize an HTML document with specified configuration
22        using (var document = new HTMLDocument(Path.Combine(OutputDir, "runtime-service.html"), configuration))
23        {
24            // Convert HTML to PNG
25            Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "runtime-service_out.png"));
26        }
27    }

Сетевая служба – Network Service

Aspose.HTML for .NET предлагает INetworkService, который позволяет вам контролировать весь входящий/исходящий трафик и реализовывать свои собственные обработчики сообщений. Его можно использовать для различных целей, таких как: создание собственного механизма кэширования, трассировка/логирование сообщений запроса и т. д.

Обработчики сообщений – Message Handlers

В следующем примере показано, как создать собственный обработчик сообщений – LogMessageHandler – для регистрации сведений о недоступных ресурсах:

 1using System.IO;
 2using Aspose.Html;
 3using System.Net;
 4using Aspose.Html.Net;
 5using System.Collections.Generic;
 6...
 7    // This message handler logs all failed requests to the console
 8	private class LogMessageHandler : MessageHandler
 9    {
10        public List<string> ErrorMessages
11        {
12            get { return errors; }
13        }
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    }

В следующем фрагменте кода показано, как использовать класс LogMessageHandler, созданные в примере выше, для регистрации информации о недоступных ресурсах.

 1using System;
 2using System.IO;
 3using Aspose.Html;
 4using Aspose.Html.Converters;
 5using Aspose.Html.Net;
 6using Aspose.Html.Saving;
 7using Aspose.Html.Services;
 8...
 9    // Prepare HTML code and save it to a file
10    var code = "<img src=\"https://docs.aspose.com/svg/net/drawing-basics/filters-and-gradients/park.jpg\" >\r\n" +
11               "<img src=\"https://docs.aspose.com/html/net/missing1.jpg\" >\r\n" +
12			   "<img src=\"https://docs.aspose.com/html/net/missing2.jpg\" >\r\n";
13
14    File.WriteAllText(Path.Combine(OutputDir, "network-service.html"), code);
15
16    // Create an instance of Configuration
17    using (var configuration = new Configuration())
18    {
19        // Add the LogMessageHandler to the chain of existing message handlers
20        var networkService = configuration.GetService<INetworkService>();
21
22        var logHandler = new LogMessageHandler();
23        networkService.MessageHandlers.Add(logHandler);
24
25        // Initialize an HTML document with specified configuration
26        using (var document = new HTMLDocument(Path.Combine(OutputDir, "network-service.html"), configuration))
27        {
28            //Convert HTML to PNG
29            Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "network-service_out.png"));
30
31            // Print the List of ErrorMessages
32            foreach (string errorMessage in logHandler.ErrorMessages)
33            {
34                Console.WriteLine(errorMessage);
35            }
36        }
37    }

После запуска примера:

File 'https://docs.aspose.com/html/net/missing1.jpg' Not Found
File 'https://docs.aspose.com/html/net/missing2.jpg' Not Found

Вы можете скачать полные примеры и файлы данных с GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.