Конфигурация среды – 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).
Служба выполнения – 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}
После запуска примера:
- созданный файл
network-service.html
будет конвертирован в PNG. В файле PNG находится только одно изображение; - будет распечатан список сообщений об ошибках:
File 'https://docs.aspose.com/html/net/missing1.jpg' Not Found
File 'https://docs.aspose.com/html/net/missing2.jpg' Not Found
Вы можете скачать полные примеры и файлы данных с GitHub.