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

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

Песочница – Sandbox

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

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

 1// Prepare HTML code and save it to a file
 2String code = "<span>Hello World!!</span>\n" +
 3        "<script>document.write('Have a nice day!');</script>\n";
 4
 5try (java.io.FileWriter fileWriter = new java.io.FileWriter(Resources.output("sandboxing.html"))) {
 6    fileWriter.write(code);
 7}
 8
 9// Create an instance of the Configuration class
10com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
11try {
12    // Mark 'scripts' as an untrusted resource
13    configuration.setSecurity(com.aspose.html.Sandbox.Scripts);
14
15    // Initialize an HTML document with specified configuration
16    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(Resources.output("sandboxing.html"), configuration);
17    try {
18        // Convert HTML to PDF
19        com.aspose.html.converters.Converter.convertHTML(
20                document,
21                new com.aspose.html.saving.PdfSaveOptions(),
22                Resources.output("sandboxing_out.pdf")
23        );
24    } finally {
25        if (document != null) {
26            document.dispose();
27        }
28    }
29} finally {
30    if (configuration != null) {
31        configuration.dispose();
32    }
33}

В примере создается новый экземпляр 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// Prepare HTML code and save it to a file
 2String code = "<span>Hello World!!!</span>";
 3
 4try (java.io.FileWriter fileWriter = new java.io.FileWriter("user-agent-stylesheet.html")) {
 5    fileWriter.write(code);
 6}
 7
 8// Create an instance of the Configuration class
 9com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
10try {
11    // Get the IUserAgentService
12    com.aspose.html.services.IUserAgentService userAgent = configuration.getService(com.aspose.html.services.IUserAgentService.class);
13
14    // Set the custom color to the <span> element
15    userAgent.setUserStyleSheet("span { color: green; }");
16
17    // Initialize an HTML document with specified configuration
18    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(Resources.output("user-agent-stylesheet.html"), configuration);
19    try {
20        // Convert HTML to PDF
21        com.aspose.html.converters.Converter.convertHTML(
22                document,
23                new com.aspose.html.saving.PdfSaveOptions(),
24                Resources.output("user-agent-stylesheet_out.pdf")
25        );
26    } finally {
27        if (document != null) {
28            document.dispose();
29        }
30    }
31} finally {
32    if (configuration != null) {
33        configuration.dispose();
34    }
35}

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

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

  1. Создайте экземпляр класса Configuration.
  2. Используйте метод getService() для получения экземпляра службы агента пользователя. Метод принимает IUserAgentService.class в качестве параметра.
  3. Вызовите метод setCharSet() службы агента пользователя и укажите желаемый набор символов (кодировку). В этом примере в качестве набора символов задан ISO-8859-1.
 1// Prepare HTML code and save it to a file
 2String 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
 5try (java.io.FileWriter fileWriter = new java.io.FileWriter(Resources.output("user-agent-charset.html"))) {
 6    fileWriter.write(code);
 7}
 8
 9// Create an instance of the Configuration class
10com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
11try {
12    // Get the IUserAgentService
13    com.aspose.html.services.IUserAgentService userAgent = configuration.getService(com.aspose.html.services.IUserAgentService.class);
14
15    // Set ISO-8859-1 encoding to parse the document
16    userAgent.setCharSet("ISO-8859-1");
17
18    // Initialize an HTML document with specified configuration
19    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(Resources.output("user-agent-charset.html"), configuration);
20    try {
21        // Convert HTML to PDF
22        com.aspose.html.converters.Converter.convertHTML(
23                document,
24                new com.aspose.html.saving.PdfSaveOptions(),
25                Resources.output("user-agent-charset_out.pdf")
26        );
27    } finally {
28        if (document != null) {
29            document.dispose();
30        }
31    }
32} finally {
33    if (configuration != null) {
34        configuration.dispose();
35    }
36}

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

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

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

 1// Prepare HTML code and save it to a file
 2String code = "<h1>FontsSettings property</h1>\r\n" +
 3        "<p>The FontsSettings property is used for configuration of fonts handling.</p>\r\n";
 4
 5try (java.io.FileWriter fileWriter = new java.io.FileWriter(Resources.output("user-agent-fontsetting.html"))) {
 6    fileWriter.write(code);
 7}
 8
 9// Initialize an instance of the Configuration class
10com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
11try {
12    // Get the IUserAgentService
13    com.aspose.html.services.IUserAgentService userAgent = configuration.getService(com.aspose.html.services.IUserAgentService.class);
14
15    // Set custom font folder path
16    userAgent.getFontsSettings().setFontsLookupFolder("fonts");
17
18    // Initialize an HTML document with specified configuration
19    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(Resources.output("user-agent-fontsetting.html"), configuration);
20    try {
21        // Convert HTML to PDF
22        com.aspose.html.converters.Converter.convertHTML(
23                document,
24                new com.aspose.html.saving.PdfSaveOptions(),
25                Resources.output("user-agent-fontsetting_out.pdf")
26        );
27    } finally {
28        if (document != null) {
29            document.dispose();
30        }
31    }
32} finally {
33    if (configuration != null) {
34        configuration.dispose();
35    }
36}

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

Служба выполнения – 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// Prepare HTML code and save it to a file
 2String 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
 6try (java.io.FileWriter fileWriter = new java.io.FileWriter(Resources.output("runtime-service.html"))) {
 7    fileWriter.write(code);
 8}
 9
10// Create an instance of the Configuration class
11com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
12try {
13    // Limit JS execution time to 5 seconds
14    com.aspose.html.services.IRuntimeService runtimeService = configuration.getService(com.aspose.html.services.IRuntimeService.class);
15    runtimeService.setJavaScriptTimeout(TimeSpan.fromSeconds(5));
16
17    // Initialize an HTML document with specified configuration
18    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(Resources.output("runtime-service.html"), configuration);
19    try {
20        // Convert HTML to PNG
21        com.aspose.html.converters.Converter.convertHTML(
22                document,
23                new ImageSaveOptions(),
24                Resources.output("runtime-service_out.png")
25        );
26    } finally {
27        if (document != null) {
28            document.dispose();
29        }
30    }
31} finally {
32    if (configuration != null) {
33        configuration.dispose();
34    }
35}

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

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

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

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

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

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

 1// Prepare HTML code with missing image file
 2String code = "<img src='missing.jpg'>";
 3
 4try (java.io.FileWriter fileWriter = new java.io.FileWriter("document.html")) {
 5    fileWriter.write(code);
 6}
 7
 8// Create an instance of Configuration
 9com.aspose.html.Configuration configuration = new com.aspose.html.Configuration();
10try {
11    // Add ErrorMessageHandler to the chain of existing message handlers
12    com.aspose.html.services.INetworkService network = configuration.getService(com.aspose.html.services.INetworkService.class);
13    network.getMessageHandlers().addItem(handler);
14
15    // Initialize an HTML document with specified configuration
16    // During the document loading, the application will try to load the image and we will see the result of this operation in the console
17    com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument("document.html", configuration);
18    try {
19        // Convert HTML to PNG
20        com.aspose.html.converters.Converter.convertHTML(
21                document,
22                new com.aspose.html.saving.ImageSaveOptions(),
23                "output.png"
24        );
25    } finally {
26        if (document != null) {
27            document.dispose();
28        }
29    }
30} finally {
31    if (configuration != null) {
32        configuration.dispose();
33    }
34}

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

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.