Конфигурация среды – 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-документе:
- В примере мы используем конструктор
Configuration()
для создания экземпляра класса Configuration. - Затем мы вызываем метод
getService() класса Configuration и передаем ему
IUserAgentService.class
в качестве параметра. Итак, мы получаем экземпляр User Agent Service. - Чтобы установить пользовательскую таблицу стилей, которая будет применяться к HTML-документу, мы используем метод
setUserStyleSheet()
службы агента пользователя, предоставляя код CSS в качестве аргумента. В этом случае правило CSSspan { 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-документе:
- Создайте экземпляр класса Configuration.
- Используйте метод getService() для получения экземпляра службы агента пользователя. Метод принимает
IUserAgentService.class
в качестве параметра. - Вызовите метод
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-документа в формат изображения:
- В примере мы создаем HTML-документ с нуля. Подготовленный HTML-код содержит бесконечный цикл внутри элемента
<script>
. Мы используем FileWriter() для записи кода HTML в файл. - Создайте экземпляр класса Configuration.
- Вызовите метод getService(), чтобы получить экземпляр службы выполнения.
- Используйте метод setJavaScriptTimeout() службы выполнения, чтобы указать максимально допустимое время выполнения кода JavaScript. Пример установлен на 5 секунд.
- Создайте объект HTMLDocument с помощью конструктора HTMLDocument(address, configuration). Он принимает путь к ранее созданному файлу HTML и объекту конфигурации.
- Преобразуйте 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.