Конфигурация среды – Environment Configuration C#
Часто полезно иметь разные конфигурации в зависимости от среды, в которой выполняется приложение. Например, вы можете настроить политику сценариев, переопределить стиль документа, применяя пользовательскую таблицу стилей, или обработать любые веб-запросы из приложения. Aspose.HTML предоставляет класс Configuration, который можно использовать именно для этих целей.
Песочница – Sandbox
Набор «sandboxing flag» – это набор из нуля или более флагов, которые используются для ограничения возможностей потенциально ненадежных ресурсов. Атрибут песочницы позволяет установить ряд ограничений на загружаемый во фрейм контент, например, блокировать формы и скрипты. Это повышает безопасность текущего документа, особенно когда документ загружается во фрейм из непроверенного источника.
В следующем примере показано, как пометить Scripts
как ненадежный ресурс. В результате Scripts
будут отключены во время выполнения приложения.
1// Enable sandboxing to restrict script execution when loading HTML
2
3// Prepare HTML code and save it to a file
4string code = "<span>Hello, World!!</span> " +
5 "<script>document.write('Have a nice day!');</script>";
6
7File.WriteAllText(Path.Combine(OutputDir, "sandboxing.html"), code);
8
9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12 // Mark 'scripts' as an untrusted resource
13 configuration.Security |= Sandbox.Scripts;
14
15 // Initialize an HTML document with specified configuration
16 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "sandboxing.html"), configuration))
17 {
18 // Convert HTML to PDF
19 Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "sandboxing_out.pdf"));
20 }
21}
Сервисы – Services
Весь важный функционал сгруппирован в отдельные сервисы для удобства использования и расположен в пространстве имен Aspose.Html.Services.
Служба пользовательского агента – User Agent Service
User Agent Service позволяет указать настраиваемую таблицу стилей пользователя, основной набор символов для документа, настройки языка и шрифтов. Вы можете указать свою пользовательскую информацию о стиле для конкретного документа и внести столько изменений конфигурации среды, сколько необходимо. Интерфейс IUserAgentService описывает среду пользовательского агента.
Пользовательская таблица стилей – User Style Sheet
Пользователь может указать информацию пользовательского стиля для конкретного документа. Эта информация относится к документу в соответствии с cascading rules и может повлиять на представление документа. Следующий фрагмент кода показывает, как использовать свойство UserStyleSheet:
1// Apply custom CSS via user agent service during HTML processing in C#
2
3// Prepare HTML code and save it to a file
4string code = "<h1>User Agent Service </h1>\r\n" +
5 "<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";
6
7File.WriteAllText(Path.Combine(OutputDir, "user-agent-stylesheet.html"), code);
8
9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12 // Get the IUserAgentService
13 IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15 // Set the custom style parameters for the <h1> and <p> elements
16 userAgentService.UserStyleSheet = "h1 { color:#a52a2a;; font-size:2em;}\r\n" +
17 "p { background-color:GhostWhite; color:SlateGrey; font-size:1.2em; }\r\n";
18
19 // Initialize the HTML document with specified configuration
20 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-stylesheet.html"), configuration))
21 {
22 // Convert HTML to PDF
23 Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-stylesheet_out.pdf"));
24 }
25}
Вы можете скачать полные примеры и файлы данных с GitHub..
Набор символов – Character Set
Свойство CharSet
устанавливает первичный набор символов для документа. Чтобы правильно анализировать и отображать HTML-документ, приложение должно знать, какой набор символов (кодировка) используется для документа. Если кодировка символов не указана напрямую в заголовке документа, Aspose.HTML использует UTF-8, которая определена как кодировка по умолчанию для спецификации HTML5. Однако, если вы уверены, что ваш HTML-документ написан с использованием кодировки, отличной от UTF-8, вы можете указать ее вручную, как показано ниже.
1// Set character encoding and custom styles for HTML to PDF conversion in C#
2
3// Prepare HTML code and save it to a file
4string code = "<h1>Character Set</h1>\r\n" +
5 "<p>The <b>CharSet</b> property sets the primary character-set for a document.</p>\r\n";
6
7File.WriteAllText(Path.Combine(OutputDir, "user-agent-charset.html"), code);
8
9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12 // Get the IUserAgentService
13 IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15 // Set the custom style parameters for the <h1> and <p> elements
16 userAgentService.UserStyleSheet = "h1 { color:salmon; }\r\n" +
17 "p { background-color:#f0f0f0; color:DarkCyan; font-size:1.2em; }\r\n";
18
19 // Set ISO-8859-1 encoding to parse the document
20 userAgentService.CharSet = "ISO-8859-1";
21
22 // Initialize the HTML document with specified configuration
23 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-charset.html"), configuration))
24 {
25 // Convert HTML to PDF
26 Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-charset_out.pdf"));
27 }
28}
В приведенном выше примере мы использовали свойства CharSet и UserStyleSheet для настройки кодировки ISO-8859-1 и пользовательского стиля.
Установить папку со шрифтами
Aspose.HTML – это мощная библиотека для работы с документами HTML в приложениях .NET. Он предоставляет широкий спектр функций, позволяющих разработчикам преобразовывать HTML-документы в различные выходные форматы, такие как PDF, XPS, DOCX и изображения. Одной из ключевых особенностей Aspose.HTML является его способность работать с пользовательскими шрифтами, что позволяет разработчикам добавлять свои собственные шрифты в процесс рендеринга.
Свойство FontsSettings
используется для настройки работы со шрифтами. Для ситуации, когда вам нужно использовать пользовательские шрифты вместо шрифтов, установленных в ОС, вы можете указать путь к своей пользовательской папке, как показано в следующем фрагменте кода:
1// Set font folder for HTML to PDF conversion using C#
2
3// Prepare HTML code and save it to a file
4string code = "<h1>FontsSettings property</h1>\r\n" +
5 "<p>The FontsSettings property is used for configuration of fonts handling.</p>\r\n";
6
7File.WriteAllText(Path.Combine(OutputDir, "user-agent-fontsetting.html"), code);
8
9// Create an instance of Configuration
10using (Configuration configuration = new Configuration())
11{
12 // Get the IUserAgentService
13 IUserAgentService userAgentService = configuration.GetService<IUserAgentService>();
14
15 // Set the custom style parameters for the <h1> and <p> elements
16 userAgentService.UserStyleSheet = "h1 { color:#a52a2a; }\r\n" +
17 "p { color:grey; }\r\n";
18
19 // Set a custom font folder path
20 userAgentService.FontsSettings.SetFontsLookupFolder(Path.Combine(DataDir + "fonts"));
21
22 // Initialize the HTML document with specified configuration
23 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "user-agent-fontsetting.html"), configuration))
24 {
25 // Convert HTML to PDF
26 Converter.ConvertHTML(document, new PdfSaveOptions(), Path.Combine(OutputDir, "user-agent-fontsetting_out.pdf"));
27 }
28}
Чтобы установить папку шрифта с помощью библиотеки Aspose.HTML for .NET, мы используем метод SetFontsLookupFolder()
класса
FontsSettings. Этот метод позволяет указать папку, в которой находятся пользовательские шрифты. Установив папку шрифтов, Aspose.HTML будет искать шрифты в указанной папке при рендеринге HTML-документа.
На рисунке показан результат применения свойств FontsSettings и UserStyleSheet (b) к исходному файлу «user-agent-fontsetting.html» (a).
Служба выполнения – Runtime Service
Эта служба дает вам контроль над временем жизни внутренних процессов. Например, с помощью IRuntimeService вы можете указать время ожидания для JavaScript. Важно иметь такой таймаут на случай, если скрипт содержит бесконечный цикл. Следующий фрагмент кода демонстрирует, как использовать тайм-ауты.
1// Limit JavaScript execution time for HTML rendering using C#
2
3// Prepare an HTML code and save it to a file
4string code = "<h1>Runtime Service</h1>\r\n" +
5 "<script> while(true) {} </script>\r\n" +
6 "<p>The Runtime Service optimizes your system by helping it start apps and programs faster.</p>\r\n";
7
8File.WriteAllText(Path.Combine(OutputDir, "runtime-service.html"), code);
9
10// Create an instance of Configuration
11using (Configuration configuration = new Configuration())
12{
13 // Limit JS execution time to 5 seconds
14 IRuntimeService runtimeService = configuration.GetService<IRuntimeService>();
15 runtimeService.JavaScriptTimeout = TimeSpan.FromSeconds(5);
16
17 // Initialize an HTML document with specified configuration
18 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "runtime-service.html"), configuration))
19 {
20 // Convert HTML to PNG
21 Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "runtime-service_out.png"));
22 }
23}
Сетевая служба – Network Service
Aspose.HTML for .NET предлагает INetworkService, который позволяет вам контролировать весь входящий/исходящий трафик и реализовывать свои собственные обработчики сообщений. Его можно использовать для различных целей, таких как: создание собственного механизма кэширования, трассировка/логирование сообщений запроса и т. д.
Обработчики сообщений – Message Handlers
В следующем примере показано, как создать собственный обработчик сообщений – LogMessageHandler – для регистрации сведений о недоступных ресурсах:
1// Сustom network message handler to log HTTP errors during HTML processing
2
3private class LogMessageHandler : MessageHandler
4{
5 private List<string> errors = new List<string>();
6
7 public List<string> ErrorMessages
8 {
9 get { return errors; }
10 }
11
12 public override void Invoke(INetworkOperationContext context)
13 {
14 // Check whether response is OK
15 if (context.Response.StatusCode != HttpStatusCode.OK)
16 {
17 // Set error information
18 errors.Add(string.Format("File '{0}' Not Found", context.Request.RequestUri));
19 }
20
21 // Invoke the next message handler in the chain
22 Next(context);
23 }
24}
В следующем фрагменте кода показано, как использовать класс LogMessageHandler, созданные в примере выше, для регистрации информации о недоступных ресурсах.
1// Log network errors during HTML processing using custom message handler in C#
2
3// Prepare HTML code and save it to a file
4string code = "<img src=\"https://docs.aspose.com/svg/net/drawing-basics/filters-and-gradients/park.jpg\" >\r\n" +
5 "<img src=\"https://docs.aspose.com/html/net/missing1.jpg\" >\r\n" +
6 "<img src=\"https://docs.aspose.com/html/net/missing2.jpg\" >\r\n";
7
8File.WriteAllText(Path.Combine(OutputDir, "network-service.html"), code);
9
10// Create an instance of Configuration
11using (Configuration configuration = new Configuration())
12{
13 // Add the LogMessageHandler to the chain of existing message handlers
14 INetworkService networkService = configuration.GetService<INetworkService>();
15
16 LogMessageHandler logHandler = new LogMessageHandler();
17 networkService.MessageHandlers.Add(logHandler);
18
19 // Initialize an HTML document with specified configuration
20 using (HTMLDocument document = new HTMLDocument(Path.Combine(OutputDir, "network-service.html"), configuration))
21 {
22 //Convert HTML to PNG
23 Converter.ConvertHTML(document, new ImageSaveOptions(), Path.Combine(OutputDir, "network-service_out.png"));
24
25 // Print the List of ErrorMessages
26 foreach (string errorMessage in logHandler.ErrorMessages)
27 {
28 Console.WriteLine(errorMessage);
29 }
30 }
31}
После запуска примера:
- созданный файл
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.