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

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

Песочница – Sandbox

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

В следующем примере Java показано, как преобразовать HTML-документ в формат PDF и применить ограничения песочницы – как пометить “Scripts” как ненадежный ресурс. В результате “Scripts” будут отключены во время выполнения приложения.

 1// @code-snippet1
 2// Prepare HTML code and save it to a file
 3String code = "<span>Hello World!!</span>\n" +
 4        "<script>document.write('Have a nice day!');</script>\n";
 5
 6try (java.io.FileWriter fileWriter = new java.io.FileWriter("sandboxing.html")) {
 7    fileWriter.write(code);
 8}
 9
10// Create an instance of the Configuration class
11Configuration configuration = new Configuration();
12
13// Mark 'scripts' as an untrusted resource
14configuration.setSecurity(com.aspose.html.Sandbox.Scripts);
15
16// Initialize an HTML document with specified configuration
17HTMLDocument document = new HTMLDocument("sandboxing.html", configuration);
18
19// Convert HTML to PDF
20Converter.convertHTML(document, new PdfSaveOptions(), "sandboxing_out.pdf");

В примере создается новый экземпляр Configuration класса для настройки песочницы. Метод setSecurity() вызывается для объекта конфигурации, ему передается com.aspose.html.Sandbox.Scripts в качестве аргумента. Этот флаг включает песочницу и ограничивает выполнение скриптов в HTML-документе.

Сервисы – Services

Весь важный функционал сгруппирован в отдельные сервисы для удобства использования и расположен в пакете com.aspose.html.services.

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

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

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

Пользователь может указать информацию пользовательского стиля для конкретного документа. Эта информация применяется к документу в соответствии с cascading rules и может повлиять на представление документа. Следующий фрагмент кода Java демонстрирует использование службы агента пользователя ( IUserAgentService) для применения пользовательской таблицы стилей к HTML-документу, который затем преобразуется в PDF.

Давайте просто рассмотрим необходимые шаги для указания пользовательской таблицы стилей в HTML-документе:

  1. В примере мы используем конструктор Configuration() для создания экземпляра класса Configuration.
  2. Затем мы вызываем метод getService() класса Configuration и передаем ему IUserAgentService.class в качестве параметра. Итак, мы получаем экземпляр User Agent Service.
  3. Чтобы установить пользовательскую таблицу стилей, которая будет применяться к HTML-документу, мы используем метод setUserStyleSheet() службы агента пользователя, предоставляя код CSS в качестве аргумента. В этом случае правило CSS span { color: green; } используется для того, чтобы все элементы <span> отображали текст зеленым цветом.
 1// @code-snippet2
 2// Prepare HTML code and save it to a file
 3String code = "<span>Hello World!!!</span>";
 4
 5try (java.io.FileWriter fileWriter = new java.io.FileWriter("user-agent-stylesheet.html")) {
 6    fileWriter.write(code);
 7}
 8
 9// Create an instance of the Configuration class
10Configuration configuration = new Configuration();
11
12// Get the IUserAgentService
13IUserAgentService userAgent = configuration.getService(IUserAgentService.class);
14
15// Set the custom color to the <span> element
16userAgent.setUserStyleSheet("span { color: green; }");
17
18// Initialize an HTML document with specified configuration
19HTMLDocument document = new HTMLDocument("user-agent-stylesheet.html", configuration);
20
21// Convert HTML to PDF
22Converter.convertHTML(document, new PdfSaveOptions(), "user-agent-stylesheet_out.pdf");

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

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

  1. Создайте экземпляр класса Configuration.
  2. Используйте метод getService() для получения экземпляра службы агента пользователя. Метод принимает IUserAgentService.class в качестве параметра.
  3. Вызовите метод setCharSet() службы агента пользователя и укажите желаемый набор символов (кодировку). В этом примере в качестве набора символов задан ISO-8859-1.
 1// @code-snippet3
 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
 7try (java.io.FileWriter fileWriter = new java.io.FileWriter("user-agent-charset.html")) {
 8    fileWriter.write(code);
 9}
10
11// Create an instance of the Configuration class
12Configuration configuration = new Configuration();
13
14// Get the IUserAgentService
15IUserAgentService userAgent = configuration.getService(IUserAgentService.class);
16
17// Set ISO-8859-1 encoding to parse the document
18userAgent.setCharSet("ISO-8859-1");
19
20// Initialize an HTML document with specified configuration
21HTMLDocument document = new HTMLDocument("user-agent-charset.html", configuration);
22
23// Convert HTML to PDF
24Converter.convertHTML(document, new PdfSaveOptions(), "user-agent-charset_out.pdf");

Установив набор символов с помощью метода setCharSet(), приложение информирует механизм синтаксического анализа и рендеринга Aspose.HTML for Java о конкретной кодировке, используемой в документе HTML. Это очень важно, потому что разные наборы символов могут представлять символы по-разному, и без правильной информации о кодировке документ может быть неточно проанализирован или отображен.

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

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

 1// @code-snippet4
 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
 7try (java.io.FileWriter fileWriter = new java.io.FileWriter("user-agent-fontsetting.html")) {
 8    fileWriter.write(code);
 9}
10
11// Initialize an instance of the Configuration class
12Configuration configuration = new Configuration();
13
14// Get the IUserAgentService
15IUserAgentService userAgent = configuration.getService(IUserAgentService.class);
16
17// Set custom font folder path
18userAgent.getFontsSettings().setFontsLookupFolder("fonts");
19
20// Initialize an HTML document with specified configuration
21HTMLDocument document = new HTMLDocument("user-agent-fontsetting.html", configuration);
22
23// Convert HTML to PDF
24Converter.convertHTML(document, new PdfSaveOptions(), "user-agent-fontsetting_out.pdf");

Чтобы установить папку шрифта с помощью библиотеки Aspose.HTML for Java, мы используем класс FontsSettings для доступа к объекту FontsSettings. Метод setFontsLookupFolder() вызывается для объекта FontsSettings, указывая путь к папке, в которой находятся шрифты.

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

Text “FontsSettings property”

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

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

  1. В примере мы создаем HTML-документ с нуля. Подготовленный HTML-код содержит бесконечный цикл внутри элемента <script>. Мы используем FileWriter() для записи кода HTML в файл.
  2. Создайте экземпляр класса Configuration.
  3. Вызовите метод getService(), чтобы получить экземпляр службы выполнения.
  4. Используйте метод setJavaScriptTimeout() службы выполнения, чтобы указать максимально допустимое время выполнения кода JavaScript. Пример установлен на 5 секунд.
  5. Создайте объект HTMLDocument с помощью конструктора HTMLDocument(address, configuration). Он принимает путь к ранее созданному файлу HTML и объекту конфигурации.
  6. Преобразуйте HTML в PNG, используя метод convertHTML(document, options, outputPath).

В примере, если тайм-аут в 5 секунд превышен во время выполнения JavaScript, Aspose.HTML прервет выполнение кода JavaScript и продолжит оставшийся процесс преобразования HTML в PNG.

 1// @code-snippet5
 2// Prepare HTML code and save it to a file
 3String code = "<h1>Runtime Service</h1>\r\n" +
 4        "<script> while(true) {} </script>\r\n" +
 5        "<p>The Runtime Service optimizes your system by helping it start apps and programs faster.</p>\r\n";
 6
 7try (java.io.FileWriter fileWriter = new java.io.FileWriter("runtime-service.html")) {
 8    fileWriter.write(code);
 9}
10
11// Create an instance of the Configuration class
12Configuration configuration = new Configuration();
13
14// Limit JS execution time to 5 seconds
15IRuntimeService runtimeService = configuration.getService(IRuntimeService.class);
16runtimeService.setJavaScriptTimeout(TimeSpan.fromSeconds(5));
17
18// Initialize an HTML document with specified configuration
19HTMLDocument document = new HTMLDocument("runtime-service.html", configuration);
20
21// Convert HTML to PNG
22Converter.convertHTML(document, new ImageSaveOptions(), "runtime-service_out.png");

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

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

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

Используя MessageHandler класс и переопределяя метод invoke(), вы можете определить пользовательскую логику, которая будет выполняться во время сетевых операций. В следующем примере показано, как использовать обработчики сообщений для регистрации сведений о недоступных ресурсах. В примере логика проверяет код состояния ответа и обрабатывает случай, когда файл не найден:

 1// @code-snippet6
 2
 3// Create a MessageHandler. This message handler logs all failed requests to the console
 4MessageHandler handler = new MessageHandler() {
 5    @Override
 6    public void invoke(INetworkOperationContext context) {
 7        if (context.getResponse().getStatusCode() != HttpURLConnection.HTTP_OK) {
 8            System.out.println(String.format("File '%s' Not Found", context.getRequest().getRequestUri().toString()));
 9        }
10
11        // Invoke the next message handler in the chain
12        next(context);
13    }
14};

Прежде всего, вам нужно создать собственный обработчик сообщений и использовать его следующим образом:

 1// @code-snippet7
 2
 3// Prepare HTML code with missing image file
 4String code = "<img src='missing.jpg'>";
 5
 6try (java.io.FileWriter fileWriter = new java.io.FileWriter("document.html")) {
 7    fileWriter.write(code);
 8}
 9
10// Create an instance of Configuration
11Configuration configuration = new Configuration();
12
13// Add ErrorMessageHandler to the chain of existing message handlers
14INetworkService network = configuration.getService(INetworkService.class);
15LogMessageHandler logHandler = new LogMessageHandler();
16network.getMessageHandlers().addItem(logHandler);
17
18// Initialize an HTML document with specified configuration
19// During the document loading, the application will try to load the image and we will see the result of this operation in the console.
20HTMLDocument document = new HTMLDocument("document.html", configuration);
21
22// Convert HTML to PNG
23Converter.convertHTML(document, new ImageSaveOptions(), "output.png");

Заключение

Функция Конфигурация среды – Environment Configurations в Aspose.HTML for Java позволяет разработчикам точно настраивать поведение своих приложений в соответствии с определенными требованиями. Используя класс Configuration и связанные с ним службы, вы можете эффективно управлять критически важными аспектами, такими как безопасность, настройка, кодировка символов, параметры шрифтов, время выполнения и сетевые операции.

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

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.