Convertidores de ajuste fino – convierta HTML, MHTML, EPUB y SVG en Java
Puede convertir HTML a varios formatos populares de varias maneras utilizando Aspose.HTML for Java:
- Utilizando los métodos
convertHTML() de la clase
Converter
. Esta es la forma más común de convertir HTML a varios formatos. - Utilizando el método
renderTo(
device
) de la claseHTMLDocument
o los métodosrender()
de la clase Renderer. Esta forma alternativa de representar documentos HTML puede brindarle más control sobre el proceso de representación HTML en su aplicación Java.
Dispositivo de renderizado – Rendering Device
El dispositivo de renderizado (rendering device) encapsula una superficie de dibujo 2D, cuya API se implementa mediante la interfaz IDevice. Actualmente, Aspose.HTML for Java API implementa un conjunto de dispositivos de renderizado: PdfDevice, XpsDevice, DocDevice y ImageDevice, que se utilizan para generar PDF. Formatos de archivo XPS, DOCX e imagen, respectivamente.
El siguiente ejemplo muestra cómo utilizar PdfDevice para convertir un documento HTML en un archivo PDF. El proceso ocurre con las opciones de renderizado predeterminadas:
- Cargue un documento HTML.
- Cree una instancia de la clase PdfDevice usando uno de los constructores PdfDevice().
- Llame al método
renderTo(
device
) de la claseHTMLDocument
.
1// Prepare HTML code
2String code = "<span>Hello, World!!</span>";
3
4// Initialize an HTML document from HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an instance of the PdfDevice class and specify the output file to render
8PdfDevice device = new PdfDevice("output.pdf");
9
10// Render HTML to PDF
11document.renderTo(device);
Opciones de renderizado
Las opciones de renderizado le brindan control adicional sobre el dispositivo de salida. Cada dispositivo de renderizado PdfDevice, XpsDevice y ImageDevice tiene su propio conjunto único de opciones y se implementa con las clases PdfRenderingOptions, XpsRenderingOptions, DocRenderingOptions y ImageRenderingOptions, respectivamente. Por ejemplo, puede cambiar el tamaño de la página, ajustar los márgenes y el color de fondo, reducir el tamaño del archivo ajustando la calidad y resolución de la imagen, establecer una contraseña de seguridad si usa PdfDevice, etc.
A continuación se muestra una demostración de cómo utilizar PdfRenderingOptions
para personalizar el tamaño de la página durante la representación de HTML a PDF:
1// Prepare HTML code
2String code = "<span>Hello, World!!</span>";
3
4// Initialize a HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an 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 a PDF Device and specify options and output file
21PdfDevice device = new PdfDevice(options, "output.pdf");
22
23// Render HTML to PDF
24document.renderTo(device);
Opciones generales – General Options
Las Opciones de renderizado le brindan control adicional sobre el dispositivo de salida. El paquete com.aspose.html.rendering consta de numerosos objetos de renderizado y clases de opciones de bajo nivel apropiadas responsables de renderizar documentos en la implementación de IDevice. Las clases RenderingOptions y CssOptions representan opciones de renderizado, o en otras palabras, opciones de renderizado generales.
Opciones generales son válidas para todos los dispositivos de renderizado y todos los procesos de renderizado, desde HTML a PDF, XPS, DOCX e imágenes. Veamos algunos de ellos:
Resolución horizontal y vertical
La configuración de resolución horizontal y vertical es esencial para lograr resultados de alta calidad al representar HTML en otros formatos, por ejemplo, HTML a PDF. Las resoluciones horizontal y vertical se miden en píxeles por pulgada (dpi, ppp), con un valor predeterminado de 300 dpi. Esta configuración garantiza detalles nítidos y una representación fluida de elementos como texto, imágenes y líneas horizontales y verticales en PDF.
El siguiente ejemplo muestra cómo controlar la resolución del archivo PDF resultante, lo que en última instancia afecta su tamaño y calidad:
1// Prepare HTML code and save it to a 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 the HTMLDocument class
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 the PdfDevice
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 Media Type
El CSS media type es una característica importante que especifica cómo se presentará un documento en diferentes medios: en la pantalla, en papel, con un dispositivo braille, etc. Hay algunas formas de especificar el tipo de medio para una hoja de estilo, a través de hojas de estilo vinculadas o hoja de estilo en línea:
Hoja de estilo vinculada
1 <link rel="stylesheet" type="text/css" media="print" href="style.javas">
Hoja de estilo en línea
1<style type="text/css">
2@media print {
3 body{ color: #000000; }
4}
5</style>
Aspose.HTML for Java admite esta función, por lo que puede convertir documentos HTML tal como se ven en la pantalla o impresos aplicando los tipos de medios y hojas de estilo correspondientes. El siguiente ejemplo muestra cómo configurar el tipo de medio:
1// Prepare HTML code
2String code = "<span>Hello, World!!</span>";
3
4// Initialize an HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an instance of the PdfRenderingOptions class
8PdfRenderingOptions options = new PdfRenderingOptions();
9// Set the 'screen' media-type
10options.getCss().setMediaType(MediaType.Screen);
11
12// Create a PDF Device and specify options and output file
13PdfDevice device = new PdfDevice(options, "output.pdf");
14
15// Render HTML to PDF
16document.renderTo(device);
Tenga en cuenta que el valor predeterminado de
CssOptions.MediaType es Print
. Significa que el documento se convertirá aplicando hojas de estilo relacionadas con el dispositivo de impresión y se verá como en papel (puede usar la vista previa de impresión de su navegador para ver la diferencia). Si desea que el documento se vea tal como se muestra en la pantalla, debe usar
MediaType.Screen.
Color de fondo – Background Color
La configuración Background Color es una característica fundamental para personalizar la apariencia del documento renderizado. Permite a los desarrolladores especificar el color que llenará el fondo de cada página en el archivo de salida. De forma predeterminada, esta propiedad está establecida en Transparente
, lo que significa que el fondo no tendrá ningún relleno visible a menos que se especifique explícitamente. Personalizar el color de fondo puede mejorar la legibilidad de un documento, cumplir con los requisitos de marca o crear diseños visualmente atractivos.
1// Prepare HTML code and save it to a 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 the HTMLDocument class
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 the PdfDevice class
15PdfDevice device = new PdfDevice(options, "output.pdf");
16
17// Render HTML to PDF
18document.renderTo(device);
Configuración de página – Page Setup
La configuración de página es un conjunto de parámetros que determinan el diseño de una página impresa. Esos parámetros incluyen todo, desde el tamaño de la página, los márgenes y el cambio de tamaño automático hasta las reglas de prioridad @page. Con este conjunto de parámetros, puede configurar fácilmente un diseño individual para cada página.
En algunos casos, el contenido de la página HTML puede ser más ancho que el tamaño de página definido con las opciones. Si no desea cortar el contenido de la página, puede usar AdjustToWidestPage
de la clase
PageSetup. El siguiente ejemplo muestra cómo ajustar el tamaño de la página al contenido.
1// Prepare 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 an HTML document from HTML code
10HTMLDocument document = new HTMLDocument(code, ".");
11
12// Create an instance of the PdfRenderingOptions class 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 an instance of the PdfDevice class and specify options and output file
20PdfDevice device = new PdfDevice(options, "output.pdf");
21
22// Render HTML to PDF
23document.renderTo(device);
Opciones de PDF
La clase PdfRenderingOptions brinda a los desarrolladores un amplio control sobre el proceso de renderizado al convertir HTML a PDF. Permite la personalización de todas las opciones generales y, además, ofrece opciones específicas para renderizar solo en formato PDF: DocumentInfo, Encryption, FormFieldBehaviour y JpegQuality.
El siguiente ejemplo demuestra la funcionalidad de configurar permisos para un archivo PDF.
1// Prepare HTML code
2String code = "<div>Hello, World!!</div>";
3
4// Initialize an HTML document from the HTML code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create the instance of the PdfRenderingOptions class
8PdfRenderingOptions options = new PdfRenderingOptions();
9
10// Set file permissions
11options.setEncryption(
12 new PdfEncryptionInfo(
13 "user_pwd",
14 "owner_pwd",
15 PdfPermissions.PrintDocument,
16 PdfEncryptionAlgorithm.RC4_128
17 )
18);
19
20// Create a PDF Device and specify options and output file
21PdfDevice device = new PdfDevice(options, "output.pdf");
22
23// Render HTML to PDF
24document.renderTo(device);
Opciones de imagen
ImageRenderingOptions le permite personalizar una amplia gama de configuraciones, desde suavizado (antialiasing), resolución de imagen y formatos hasta compresión de imágenes. El siguiente ejemplo demuestra cómo cambiar la resolución y el antialiasing de la imagen resultante:
1// Prepare HTML code
2String code = "<div>Hello, World!!</div>";
3
4// Initialize an instance of the HTMLDocument class based on prepared code
5HTMLDocument document = new HTMLDocument(code, ".");
6
7// Create an instance of the ImageRenderingOptions class
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 the ImageDevice class
19ImageDevice device = new ImageDevice(options, "output.jpg");
20
21// Render HTML to Image
22document.renderTo(device);
Renderizadores – Renderers
Mientras que el método
renderTo(device
) de la clase
Document le brinda la posibilidad de enviar un solo documento al dispositivo de renderizado de salida, utilizando las instancias
Renderer directamente puede enviar varios archivos a la vez. Aspose.HTML for Java proporciona la siguiente implementación de renderizadores:
HtmlRenderer,
SvgRenderer,
MhtmlRenderer y
EpubRenderer, que se utilizan para renderizar HTML, SVG, MHTML. y documentos EPUB, respectivamente.
El siguiente ejemplo demuestra cómo utilizar HtmlRenderer
para representar varios documentos HTML:
1// Prepare 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 the PdfDevice class
15PdfDevice device = new PdfDevice("output.pdf");
16
17// Merge all HTML documents to PDF
18renderer.render(device, new HTMLDocument[]{document1, document2, document3});
Establecer tiempo de espera – Set Timeout
Una característica más importante que está disponible para los renderizadores es la configuración del tiempo de espera. Puede usarlo para especificar cuánto tiempo está listo para esperar a que se completen todos los procesos internos relacionados con el ciclo de vida de un documento, como la carga de recursos, temporizadores activos, etc. Claro, puede especificar un período de espera infinito. Sin embargo, si el documento contiene un script con un bucle sin fin, esperará indefinidamente. El siguiente ejemplo demuestra cómo utilizar el método
render(device
, timeout
, documents
) con el parámetro timeout
:
1// Prepare 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 the PdfDevice class
21PdfDevice device = new PdfDevice("output.pdf");
22
23// Render HTML to PDF
24renderer.render(device, 5, document);
Conclusión
Aspose.HTML for Java es una biblioteca potente y flexible para representar HTML, MHTML, EPUB y SVG en varios formatos, como PDF, XPS, DOCX e imágenes. La clase Converter
es rápida y fácil de usar para tareas sencillas. Sin embargo, si necesita más control sobre las opciones de renderizado, use el método renderTo(device)
.
Con una amplia gama de opciones de renderizado y funciones configurables, los desarrolladores tienen control total sobre la salida, incluida la resolución, la configuración de la página, los tipos de medios CSS y las configuraciones específicas del dispositivo. La flexibilidad de la API, demostrada por la capacidad de utilizar múltiples renderizadores, configurar opciones generales y específicas de formato e incluso administrar tiempos de espera, la convierte en una excelente opción para crear documentos personalizados de alta calidad.