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

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

Песочница – Sandbox

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

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

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

Сервисы – Services

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

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

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

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

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

 1// Prepare HTML code and save it to a file
 2var code = "<h1>User Agent Service </h1>\r\n" +
 3           "<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";
 4           
 5File.WriteAllText(Path.Combine(OutputDir, "user-agent-stylesheet.html"), code);
 6
 7// Create an instance of Configuration
 8using (var configuration = new Configuration())
 9{
10    // Get the IUserAgentService
11    var userAgentService = configuration.GetService<IUserAgentService>();
12
13    // Set the custom style parameters for the <h1> and <p> elements
14    userAgentService.UserStyleSheet = "h1 { color:#a52a2a;; font-size:2em;}\r\n" +
15                                      "p { background-color:GhostWhite; color:SlateGrey; font-size:1.2em; }\r\n";
16                    
17    // Initialize the HTML document with specified configuration
18    using (var document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-stylesheet.html"), configuration))
19    {                   
20        // Convert HTML to PDF
21        Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-stylesheet_out.pdf"));
22    }
23}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 1private class LogMessageHandler : MessageHandler
 2{
 3    private List<string> errors = new List<string>();
 4
 5    public List<string> ErrorMessages
 6    {
 7        get { return errors; }
 8    }
 9
10    public override void Invoke(INetworkOperationContext context)
11    {
12        // Check whether response is OK
13        if (context.Response.StatusCode != HttpStatusCode.OK)
14        {
15            // Set error information
16            errors.Add(string.Format("File '{0}' Not Found", context.Request.RequestUri));
17        }
18
19        // Invoke the next message handler in the chain
20        Next(context);
21    }
22}

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

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

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

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.