Конвертеры тонкой настройки – конвертируйте HTML, MHTML, EPUB и SVG на Java
Вы можете конвертировать HTML в различные популярные форматы несколькими способами, используя Aspose.HTML for Java:
- С помощью методов convertHTML() класса Converter. Это наиболее распространенный способ преобразования HTML в различные форматы.
- С помощью метода
renderTo(
device
) классаHTMLDocument
или методовrender()
класса Renderer. Этот альтернативный способ рендеринга HTML-документов может дать вам больше контроля над процессом преобразования HTML в вашем Java-приложении.
Устройство рендеринга – Rendering Device
Устройство рендеринга (вывода) инкапсулирует поверхность 2D-рисования, API которой реализован с использованием интерфейса IDevice. В настоящее время Aspose.HTML for Java API реализует набор устройств рендеринга – PdfDevice, XpsDevice, DocDevice и ImageDevice, которые используются для создания файлов PDF, XPS, DOCX и изображений соответственно.
В следующем примере показано, как использовать PdfDevice для конвертации HTML-документа в PDF-файл. Процесс преобразования происходит с параметрами рендеринга по умолчанию:
- Загрузите HTML-документ.
- Создайте экземпляр класса PdfDevice, используя один из конструкторов PdfDevice().
- Вызовите метод
renderTo(
device
) класса HTMLDocument.
1// Prepare an HTML code
2String code = "<span>Hello World!!</span>";
3
4// Initialize the HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create the PDF Device and specify the output file to render
8PdfDevice device = new PdfDevice("output.pdf");
9
10// Render HTML to PDF
11document.renderTo(device);
Параметры рендеринга
Параметры рендеринга дают вам дополнительный контроль над устройством вывода. Каждое устройство рендеринга PdfDevice, XpsDevice и ImageDevice имеет свой собственный уникальный набор параметров и реализуется с помощью классов PdfRenderingOptions, XpsRenderingOptions, DocRenderingOptions и ImageRenderingOptions соответственно. Например, вы можете изменить размер страницы, настроить поля и цвет фона, уменьшить размер файла, настроив качество и разрешение изображения, установить пароль безопасности в случае использования PdfDevice и т. д.
Ниже показано, как использовать PdfRenderingOptions для настройки размера страницы во время рендеринга HTML в PDF:
1// Prepare an HTML code
2String code = "<span>Hello World!!</span>";
3
4// Initialize the HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create the instance of PdfRenderingOptions and set a custom page-size
8PdfRenderingOptions options = new PdfRenderingOptions();
9PageSetup pageSetup = new PageSetup();
10Page anyPage = new Page();
11anyPage.setSize(
12 new Size(
13 Length.fromInches(5),
14 Length.fromInches(2)
15 )
16);
17pageSetup.setAnyPage(anyPage);
18options.setPageSetup(pageSetup);
19
20// Create the PDF Device and specify options and output file
21PdfDevice device = new PdfDevice(options, "output.pdf");
22
23// Render HTML to PDF
24document.renderTo(device);
Общие параметры – General Options
Параметры рендеринга дают вам дополнительный контроль над устройством вывода. Пакет com.aspose.html.rendering состоит из множества объектов рендеринга и соответствующих классов опций низкого уровня, отвечающих за рендеринг документов в реализации IDevice. Классы RenderingOptions и CssOptions представляют параметры рендеринга или, другими словами, общие параметры рендеринга.
Общие параметры действительны для всех устройств рендеринга и всех процессов рендеринга: HTML в PDF, XPS, DOCX и изображения. Давайте посмотрим на некоторые из них:
Горизонтальное и вертикальное разрешение
Настройки разрешения по горизонтали и вертикали необходимы для достижения высокого качества вывода при рендеринге HTML в другие форматы, например HTML в PDF. Горизонтальное и вертикальное разрешение измеряется в пикселях на дюйм (dpi) со значением по умолчанию 300 dpi. Этот параметр обеспечивает четкую детализацию и плавную визуализацию таких элементов, как текст, изображения, а также горизонтальные и вертикальные линии в документе PDF.
В следующем примере показано, как контролировать разрешение полученного PDF-файла, что в конечном итоге влияет на его размер и качество:
1// Prepare an HTML code and save it to the file.
2String code = "< style >\n" +
3 " p\n" +
4 " {\n" +
5 " background:\n" +
6 " blue;\n" +
7 " }\n" +
8 " @media(min - resolution:300dpi)\n" +
9 " {\n" +
10 " p\n" +
11 " {\n" +
12 " /* high resolution screen color */\n" +
13 " background:\n" +
14 " green\n" +
15 " }\n" +
16 " }\n" +
17 " </style >\n" +
18 " <p > Hello World !! </p >\n";
19
20try (java.io.FileWriter fileWriter = new java.io.FileWriter("document.html")) {
21 fileWriter.write(code);
22}
23
24// Create an instance of HTML document
25HTMLDocument document = new HTMLDocument("document.html");
26
27// Create options for low-resolution screens
28PdfRenderingOptions options = new PdfRenderingOptions();
29options.setHorizontalResolution(Resolution.to_Resolution(50d));
30options.setVerticalResolution(Resolution.to_Resolution(50d));
31
32// Create an instance of PDF device
33PdfDevice device = new PdfDevice(
34 options,
35 "output_resolution_50.pdf"
36);
37
38// Render HTML to PDF
39document.renderTo(device);
40
41// Create options for high-resolution screens
42options = new PdfRenderingOptions();
43options.setHorizontalResolution(Resolution.to_Resolution(300d));
44options.setVerticalResolution(Resolution.to_Resolution(300d));
45
46// Create an instance of PDF device
47device = new PdfDevice(
48 options,
49 "output_resolution_300.pdf"
50);
51
52// Render HTML to PDF
53document.renderTo(device);
Тип CSS-медиа – CSS Media Type
CSS Media Type – это важная функция, определяющая, как документ должен быть представлен на различных носителях: на экране, на бумаге, с помощью устройства Брайля и т. д. Существует несколько способов указать тип носителя для таблицы стилей: связанные таблицы стилей или встроенная таблица стилей:
Связанная таблица стилей
1 <link rel="stylesheet" type="text/css" media="print" href="style.javas">
Встроенная таблица стилей
1<style type="text/css">
2@media print {
3 body{ color: #000000; }
4}
5</style>
Aspose.HTML for Java поддерживает эту функцию, поэтому вы можете конвертировать HTML-документы так, как они выглядят на экране или при печати, с применением соответствующих типов мультимедиа и таблиц стилей. В следующем примере показано, как настроить тип носителя:
1// Prepare an HTML code
2String code = "<span>Hello World!!</span>";
3
4// Initialize the HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an option class
8PdfRenderingOptions options = new PdfRenderingOptions();
9// Set the 'screen' media-type
10options.getCss().setMediaType(MediaType.Screen);
11
12// Create the PDF Device and specify options and output file
13PdfDevice device = new PdfDevice(options, "output.pdf");
14
15// Render HTML to PDF
16document.renderTo(device);
Обратите внимание, что значением по умолчанию для
CssOptions.MediaType является Print
. Это означает, что документ будет конвертирован с применением таблиц стилей, связанных с печатающим устройством, и будет выглядеть как на бумаге (вы можете использовать предварительный просмотр в браузере, чтобы увидеть разницу). Если вы хотите, чтобы документ выглядел так, как он отображается на экране, вам следует использовать
MediaType.Screen.
Цвет фона – Background Color
Параметр Background Color – это важная функция для настройки внешнего вида визуализированного документа. Это позволяет разработчикам указать цвет, которым будет заполняться фон каждой страницы выходного файла. По умолчанию для этого свойства установлено значение Transparent, что означает, что фон не будет иметь видимой заливки, если это не указано явно. Настройка цвета фона может улучшить читаемость документа, удовлетворить требования к фирменному оформлению или создать визуально привлекательный дизайн.
1// Prepare an HTML code and save it to the file.
2String code = "<p>Hello World!!</p>";
3try (java.io.FileWriter fileWriter = new java.io.FileWriter("document.html")) {
4 fileWriter.write(code);
5}
6
7// Create an instance of HTML document
8HTMLDocument document = new HTMLDocument("document.html");
9
10// Initialize options with 'cyan' as a background-color
11PdfRenderingOptions options = new PdfRenderingOptions();
12options.setBackgroundColor(Color.getCyan());
13
14// Create an instance of PDF device
15PdfDevice device = new PdfDevice(options, "output.pdf");
16
17// Render HTML to PDF
18document.renderTo(device);
Настройка страницы – Page Setup
Настройка страницы – это набор параметров, определяющих макет печатаемой страницы. Эти параметры включают в себя все: от размера страницы, полей и автоматического изменения размера до правил приоритета @page. Используя этот набор параметров, вы легко сможете настроить индивидуальный макет для каждой страницы.
В некоторых случаях содержимое HTML-страницы может быть шире, чем размер страницы, определенный с помощью параметров. Если вы не хотите обрезать содержимое страницы, вы можете использовать AdjustToWidestPage
класса
PageSetup. В следующем примере показано, как настроить размер страницы в соответствии с содержимым.
1// Prepare an HTML code
2String code = " <style>\n" +
3 " div {\n" +
4 " page - break -after:always;\n" +
5 " }\n" +
6 " </style >\n" +
7 " <div style = 'border: 1px solid red; width: 400px' > First Page</div >\n" +
8 " <div style = 'border: 1px solid red; width: 600px' > Second Page</div >\n";
9// Initialize the HTML document from the HTML code
10HTMLDocument document = new HTMLDocument(code, ".");
11
12// Create the instance of Rendering Options and set a custom page-size
13PdfRenderingOptions options = new PdfRenderingOptions();
14options.getPageSetup().setAnyPage(new Page(new Size(500, 200)));
15
16// Enable auto-adjusting for the page size
17options.getPageSetup().setAdjustToWidestPage(true);
18
19// Create the PDF Device and specify options and output file
20PdfDevice device = new PdfDevice(options, "output.pdf");
21
22// Render HTML to PDF
23document.renderTo(device);
Параметры PDF – PdfRenderingOptions Class
Класс PdfRenderingOptions предоставляет разработчикам широкие возможности управления процессом рендеринга при преобразовании HTML в PDF. Он позволяет настраивать все общие параметры и, кроме того, предлагает параметры, специфичные для рендеринга только в формате PDF: DocumentInfo, Encryption, FormFieldBehaviour и JpegQuality.
В следующем примере демонстрируется возможность установки разрешений для файла PDF.
1// Prepare an HTML code
2String code = "<div>Hello World!!</div>";
3// Initialize the HTML document from the HTML code
4HTMLDocument document = new HTMLDocument(code, ".");
5
6// Create the instance of Rendering Options
7PdfRenderingOptions options = new PdfRenderingOptions();
8
9// Set the permissions to the file
10options.setEncryption(
11 new PdfEncryptionInfo(
12 "user_pwd",
13 "owner_pwd",
14 PdfPermissions.PrintDocument,
15 PdfEncryptionAlgorithm.RC4_128
16 )
17);
18
19// Create the PDF Device and specify options and output file
20PdfDevice device = new PdfDevice(options, "output.pdf");
21
22// Render HTML to PDF
23document.renderTo(device);
Параметры изображения – ImageRenderingOptions Class
ImageRenderingOptions позволяет настраивать широкий диапазон параметров: от сглаживания, конфигурации рендеринга текста, выбора формата, до сжатия изображения. В следующем примере показано, как установить разрешение и сглаживание полученного изображения:
1// Prepare an HTML code
2String code = "<div>Hello World!!</div>";
3
4// Initialize an instance of HTML document based on prepared code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an instance of Rendering Options
8ImageRenderingOptions options = new ImageRenderingOptions();
9options.setFormat(ImageFormat.Jpeg);
10
11// Disable smoothing mode
12options.setSmoothingMode(SmoothingMode.None);
13
14// Set the image resolution as 75 dpi
15options.setVerticalResolution(Resolution.fromDotsPerInch(75));
16options.setHorizontalResolution(Resolution.fromDotsPerInch(75));
17
18// Create an instance of Image Device
19ImageDevice device = new ImageDevice(options, "output.jpg");
20
21// Render HTML to Image
22document.renderTo(device);
Рендереры – Renderers
Хотя метод
renderTo(device
) класса
Document дает вам возможность отправить один документ на выходное устройство рендеринга, напрямую используя экземпляры
Renderer вы можете отправить несколько файлов одновременно. Aspose.HTML for Java предоставляет следующую реализацию средств рендеринга:
HtmlRenderer,
SvgRenderer,
MhtmlRenderer и
EpubRenderer, которые используются для рендеринга HTML, SVG, MHTML и EPUB соответственно.
Следующий пример демонстрирует, как использовать HtmlRenderer для рендеринга нескольких HTML-документов:
1// Prepare an HTML code
2String code1 = "<br><span style='color: green'>Hello World!!</span>";
3String code2 = "<br><span style='color: blue'>Hello World!!</span>";
4String code3 = "<br><span style='color: red'>Hello World!!</span>";
5
6// Create three HTML documents to merge later
7HTMLDocument document1 = new HTMLDocument(code1, ".");
8HTMLDocument document2 = new HTMLDocument(code2, ".");
9HTMLDocument document3 = new HTMLDocument(code3, ".");
10
11// Create an instance of HTML Renderer
12HtmlRenderer renderer = new HtmlRenderer();
13
14// Create an instance of PDF device
15PdfDevice device = new PdfDevice("output.pdf");
16
17// Merge all HTML documents into PDF
18renderer.render(device, new HTMLDocument[]{document1, document2, document3});
Установить тайм-аут – Set Timeout
Еще одна важная функция, доступная для рендереров, – это настройка таймаута. Вы можете использовать его, чтобы указать, как долго вы готовы ждать завершения всех внутренних процессов, связанных с жизненным циклом документа, таких как загрузка ресурсов, активные таймеры и т. д. Конечно, вы можете указать бесконечный период ожидания. Однако если документ содержит скрипт с бесконечным циклом, ждать придется бесконечно. В примере ниже показано, как использовать параметр timeout
в методе
render(device
, timeout
, documents
):
1// Prepare an HTML code
2String code = "< script >\n" +
3 " var count = 0;\n" +
4 " setInterval(function()\n" +
5 " {\n" +
6 " var element = document.createElement('div');\n" +
7 " var message = (++count) + '. ' + 'Hello World!!';\n" +
8 " var text = document.createTextNode(message);\n" +
9 " element.appendChild(text);\n" +
10 " document.body.appendChild(element);\n" +
11 " },1000);\n" +
12 "</script >\n";
13
14// Initialize an HTML document based on prepared HTML code
15HTMLDocument document = new HTMLDocument(code, ".");
16
17// Create an instance of HTML Renderer
18HtmlRenderer renderer = new HtmlRenderer();
19
20// Create an instance of PDF device
21PdfDevice device = new PdfDevice("output.pdf");
22
23// Render HTML to PDF
24renderer.render(device, 5, document);
Заключение
Aspose.HTML for Java – это мощная и гибкая библиотека для рендеринга HTML, MHTML, EPUB и SVG в различные форматы, такие как PDF, XPS, DOCX и изображения. Класс Converter
быстро и легко использовать для решения простых задач. Однако, если вам нужен больший контроль над параметрами рендеринга, используйте метод renderTo(device)
.
Благодаря широкому спектру параметров рендеринга и настраиваемых функций разработчики имеют полный контроль над выводом, включая разрешение, настройки страницы, типы мультимедиа CSS и конфигурации для конкретного устройства. Гибкость API, демонстрируемая возможностью использования нескольких средств визуализации, настройки общих и специфичных для формата параметров и даже управления тайм-аутами, делает его отличным выбором для создания высококачественных настраиваемых документов.