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