Cómo Convertir HTML a PDF usando IronPDF para JAVA

HTML a PDF en Java

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF for Java convierte contenido HTML en documentos PDF ejecutando un motor de renderización Chromium completo, el mismo motor que impulsa los navegadores modernos. Cada propiedad CSS, fuente, imagen y diseño generado por JavaScript se renderiza exactamente como lo haría en una ventana del navegador, para luego aterrizar en la página como un PDF de precisión de píxel.

Este tutorial recorre los tres métodos principales de conversión: cadena HTML a PDF, URL en vivo a PDF, y archivo HTML local a PDF. También cubre instalación, configuración de licencia y las opciones de renderización que los desarrolladores más utilizan.

La biblioteca de Java refleja la forma de la API de IronPDF for .NET, por lo que los equipos que trabajan en ambos entornos encontrarán la transición sencilla. El código fuente de todos los ejemplos de este tutorial está disponible en GitHub.

Inicio rápido: Convertir HTML a PDF en Java

Agrega IronPDF a tu Maven pom.xml, luego llama a un solo método para producir un PDF:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

// Set your license key before any rendering calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Convert an HTML string to a PDF and save it
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF for Java!</h1>");
pdf.saveAs("output.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/quickstart.java
import com.ironsoftware.ironpdf.*;

// Set your license key before any rendering calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Convert an HTML string to a PDF and save it
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF for Java!</h1>");
pdf.saveAs("output.pdf");
JAVA

Comience a usar IronPDF en su proyecto hoy con una prueba gratuita.

Primer Paso:
green arrow pointer

Tabla de contenido


Instalación de IronPDF for Java

IronPDF for Java se distribuye a través de Maven Central y como un JAR independiente. La ruta de Maven se recomienda para la mayoría de los proyectos porque maneja dependencias transitivas y mantiene las versiones de la biblioteca consistentes en las máquinas de los desarrolladores y en las canalizaciones de CI.

Opción 1: Agregar IronPDF como una dependencia de Maven

Abre el archivo pom.xml del proyecto y añade las siguientes entradas al bloque <dependencies>:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/maven-dependency.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>[LATEST_VERSION]</version>
    </dependency>
</dependencies>
XML

El primer artefacto incorpora la última versión de IronPDF for Java. El segundo artefacto activa el logueo con SLF4J para que el motor de renderización de IronPDF pueda escribir mensajes de diagnóstico durante la ejecución. Los desarrolladores que prefieren Logback o Log4J pueden sustituir ese proveedor en su lugar. La dependencia de registro es opcional: omítela si no se necesitan registros.

Después de guardar el archivo, ejecuta mvn install desde el directorio raíz del proyecto para descargar ambas bibliotecas. Maven resuelve automáticamente el gráfico de dependencias completo, incluidas las dependencias transitivas que requiere IronPDF.

Para proyectos Gradle, la declaración equivalente de dependencia en build.gradle es:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/gradle-dependency.java
// build.gradle (Groovy DSL)
// dependencies {
//     implementation 'com.ironsoftware:ironpdf:[LATEST_VERSION]'
//     implementation 'org.slf4j:slf4j-simple:[LATEST_VERSION]'
// }
JAVA

Reemplaza [LATEST_VERSION] con el número de versión del cambios de IronPDF o de la página de Maven Central para el artefacto.

Opción 2: Agregar el archivo JAR manualmente

Descarga el JAR de IronPDF directamente desde Maven Central y agrégalo al classpath del proyecto. Este enfoque funciona sin una herramienta de construcción pero requiere una gestión manual de versiones, por lo que es más adecuado para proyectos heredados que no utilizan Maven o Gradle, o para entornos donde el acceso a la red saliente está restringido.

Después de descargarlo, agrega el JAR al classpath del proyecto a través de la configuración del proyecto del IDE. En IntelliJ IDEA, haz clic derecho en la raíz del proyecto, selecciona "Open Module Settings", navega a "Dependencies" y añade el archivo JAR. En Eclipse, haz clic derecho en el proyecto, ve a "Properties > Java Build Path > Libraries", luego haz clic en "Add External JARs".

Por favor notaEl JAR de IronPDF incluye un binario del motor Chromium. La primera llamada de renderizado en una nueva máquina lo extraerá a un directorio temporal, lo cual tomará algunos segundos. Las llamadas subsecuentes usan el binario en caché y comienzan al instante. En entornos containerizados, monta un volumen persistente en la ruta de extracción para evitar re-extracción al inicio de cada container.

Requisitos del Sistema

IronPDF for Java funciona en JDK 8 o superior. Es compatible con Windows, Linux y macOS en arquitecturas x86-64 y ARM64. No se requiere la instalación de un navegador externo, el binario de Chromium está incluido con el JAR. En Linux, asegúrate de que las bibliotecas compartidas estándar esperadas por Chromium estén presentes. La documentación de IronPDF for Java lista los paquetes mínimos requeridos para distribuciones comunes de Linux.


¿Cómo importo IronPDF y configuro una clave de licencia?

Cada clase de IronPDF vive en el paquete com.ironsoftware.ironpdf. Impórtala al inicio de cualquier archivo fuente que creará o manipulará documentos PDF.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Apply your license key before any other IronPDF calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Optional: set a custom log file path
Settings.setLogPath(Paths.get("IronPdfEngine.log"));
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/import-and-license.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Apply your license key before any other IronPDF calls
License.setLicenseKey("YOUR-LICENSE-KEY");

// Optional: set a custom log file path
Settings.setLogPath(Paths.get("IronPdfEngine.log"));
JAVA

Sin una clave de licencia, IronPDF funciona en modo de prueba y estampa cada página PDF con una marca de agua repetida. Configurar la clave elimina la marca de agua y desbloquea todas las funciones. Comienza una prueba gratuita para obtener una clave de inmediato.

Marca de agua del modo de prueba de IronPDF estampada en una página PDF renderizada

La clave de licencia es una cadena que Iron Software emite cuando se activa una licencia de prueba o comercial. Guárdala en una variable de entorno o en un archivo de configuración en lugar de codificarla directamente en el código fuente. Un patrón común es leerla de una variable de entorno al inicio:

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
import com.ironsoftware.ironpdf.*;

// Read the license key from an environment variable
String licenseKey = System.getenv("IRONPDF_LICENSE_KEY");
if (licenseKey != null && !licenseKey.isEmpty()) {
    License.setLicenseKey(licenseKey);
}
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/license-from-env.java
import com.ironsoftware.ironpdf.*;

// Read the license key from an environment variable
String licenseKey = System.getenv("IRONPDF_LICENSE_KEY");
if (licenseKey != null && !licenseKey.isEmpty()) {
    License.setLicenseKey(licenseKey);
}
JAVA

Este enfoque mantiene la clave fuera del control de versiones y facilita el uso de diferentes claves en los entornos de desarrollo, pruebas, y producción.

ImportanteLicense.setLicenseKey y Settings.setLogPath deben ser llamados antes de cualquier método de renderización o manipulación. Colócalos en el inicio de la aplicación, idealmente en un bloque de inicialización estática o en un punto de entrada main.


¿Cómo convierto una cadena HTML a PDF?

PdfDocument.renderHtmlAsPdf acepta una cadena de marcado HTML y devuelve un objeto PdfDocument que puede ser guardado, combinado o modificado antes de escribir en disco. Este es el método principal para HTML generado programáticamente, por ejemplo, reportes generados combinando valores de base de datos con una plantilla HTML definida como una cadena Java o cargada de un archivo.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Simple one-liner: convert an HTML string to a PDF
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.saveAs("htmlstring_to_pdf.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Simple one-liner: convert an HTML string to a PDF
PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.saveAs("htmlstring_to_pdf.pdf");
JAVA

El motor de renderizado resuelve rutas de activos relativos (imágenes, hojas de estilo, scripts) contra el segundo argumento opcional, la ruta base. Cuando se proporciona una ruta base, el motor lo trata como la raíz desde la cual se resuelven las URL relativas. Esto permite que HTML que referencia archivos CSS e imágenes locales se renderice correctamente sin manipulación de rutas en el marcado fuente.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
import com.ironsoftware.ironpdf.*;

// HTML references assets in a local "assets" subfolder
String html = "<html>" +
    "<head><link rel='stylesheet' href='assets/style.css'></head>" +
    "<body><h1>Invoice</h1><img src='assets/logo.png' /></body>" +
    "</html>";

// Pass the base path so IronPDF resolves relative asset URLs
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html, "C:/my-project/templates");
pdf.saveAs("invoice.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-string-with-assets.java
import com.ironsoftware.ironpdf.*;

// HTML references assets in a local "assets" subfolder
String html = "<html>" +
    "<head><link rel='stylesheet' href='assets/style.css'></head>" +
    "<body><h1>Invoice</h1><img src='assets/logo.png' /></body>" +
    "</html>";

// Pass the base path so IronPDF resolves relative asset URLs
PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html, "C:/my-project/templates");
pdf.saveAs("invoice.pdf");
JAVA

El método saveAs acepta una ruta absoluta o relativa. La biblioteca crea el archivo si no existe y lo sobrescribe si lo hace. Cuando escribas a un directorio que la aplicación aún no haya creado, crea primero el directorio usando Files.createDirectories(Paths.get("output")) antes de llamar a saveAs.

IronPDF es compatible con el conjunto completo de funciones HTML5 y CSS3 tal como se implementa en Chromium. Las fuentes personalizadas cargadas a través de @font-face en CSS se renderizan correctamente cuando los archivos de fuente son accesibles en la ruta base. Los elementos SVG y <canvas> renderizados por JavaScript también aparecen en la salida PDF.

ConsejosMantén las plantillas HTML en un directorio dedicado y pasa ese directorio como la ruta base. Este patrón permite a los diseñadores actualizar la plantilla sin modificar ningún código Java.


¿Cómo convierto una URL a PDF en Java?

PdfDocument.renderUrlAsPdf obtiene la página en la URL dada, espera a que JavaScript se ejecute y el contenido dinámico se cargue, luego convierte el DOM completamente renderizado en un PDF.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a live web page to PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.saveAs("wikipedia_pdf_article.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/url-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a live web page to PDF
PdfDocument pdf = PdfDocument.renderUrlAsPdf("https://en.wikipedia.org/wiki/PDF");
pdf.saveAs("wikipedia_pdf_article.pdf");
JAVA

El motor maneja cabeceras de autenticación, cookies, y aplicaciones de una sola página pesadas en JavaScript. Para páginas que requieran un inicio de sesión o encabezados de solicitud personalizados, usa la clase ChromePdfRenderOptions para configurar los parámetros de la solicitud antes de llamar a renderUrlAsPdf.

Este método de conversión es útil para archivar páginas web, generar instantáneas de cumplimiento, y producir reportes para clientes desde paneles de control internos. Las páginas generadas por el servidor accedidas a través de una red local son totalmente compatibles: pasa http://localhost:8080/report/123 de la misma manera que una URL pública. IronPDF esperará a que la página se cargue completamente antes de renderizar, de modo que los paneles que dependen de la carga asincrónica de datos rendericen con sus datos poblados en lugar de con gráficos vacíos.

Para páginas detrás de autenticación básica HTTP, pasa las credenciales en la URL usando el formato http://user:password@host/path. Para páginas protegidas por cookies de sesión, configura el almacén de cookies en el objeto ChromePdfRenderOptions antes de pasarlo a renderUrlAsPdf. Consulta la documentación de IronPDF for Java para obtener detalles sobre la configuración de cabeceras de solicitud y la gestión de cookies para URLs autenticadas.


¿Cómo convierto un archivo HTML local a PDF?

PdfDocument.renderHtmlFileAsPdf lee un archivo HTML del sistema de archivos local y lo renderiza en PDF. Todos los activos vinculados (CSS, JavaScript, imágenes) referenciados por rutas relativas en el archivo se resuelven en relación con el mismo directorio del archivo HTML.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a local HTML file — assets resolve relative to its directory
PdfDocument pdf = PdfDocument.renderHtmlFileAsPdf("C:/invoices/TestInvoice1.html");
pdf.saveAs("htmlfile_to_pdf.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/html-file-to-pdf.java
import com.ironsoftware.ironpdf.*;

// Convert a local HTML file — assets resolve relative to its directory
PdfDocument pdf = PdfDocument.renderHtmlFileAsPdf("C:/invoices/TestInvoice1.html");
pdf.saveAs("htmlfile_to_pdf.pdf");
JAVA

Este enfoque es el más preciso para convertir documentos HTML complejos. Debido a que el motor de renderizado opera en la ruta del sistema de archivos en lugar de una cadena en memoria, las referencias relativas a directorios de activos de varios niveles se resuelven sin ninguna configuración adicional. Una plantilla que confía en un style.css y un script.js en la misma carpeta se renderizará correctamente sin ajustes de ruta.

Este método es particularmente adecuado para la generación de facturas, producción de contratos, y cualquier flujo de trabajo donde un diseñador mantenga la plantilla HTML independientemente de la aplicación Java. El equipo de desarrollo trata la plantilla como un archivo de datos, lo almacena junto a la aplicación y llama a renderHtmlFileAsPdf con la ruta. Cuando el diseñador actualiza la plantilla para cambiar la marca o el diseño, no se requieren cambios de código Java.

Por favor notaIronPDF es compatible con todas las características modernas de HTML y CSS que soporta Chromium — Flexbox, CSS Grid, variables CSS, fuentes web, y consultas de medios se renderizan correctamente en el PDF de salida.


¿Cómo configuro opciones de generación de PDF?

ChromePdfRenderOptions controla el comportamiento de renderización: tamaño del papel, márgenes, nivel de zoom, tipo de medio de impresión, tiempo de espera de JavaScript, y más. Crea una instancia, configura las propiedades deseadas y pásala como segundo argumento a cualquier método render*AsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Render the page using the print media type (uses @media print CSS rules)
options.setCssMediaType(CssMediaType.PRINT);

// Wait up to 5 seconds for JavaScript to finish executing
options.setJavaScriptTimeout(5000);

// Apply a 1.5x zoom level to scale content to fit the page
options.setZoom(150);

// Render at 150 DPI for sharper images in print output
options.setDpi(150);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(
    "<h1>Styled Report</h1>",
    options
);
pdf.saveAs("styled_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/render-options.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Render the page using the print media type (uses @media print CSS rules)
options.setCssMediaType(CssMediaType.PRINT);

// Wait up to 5 seconds for JavaScript to finish executing
options.setJavaScriptTimeout(5000);

// Apply a 1.5x zoom level to scale content to fit the page
options.setZoom(150);

// Render at 150 DPI for sharper images in print output
options.setDpi(150);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(
    "<h1>Styled Report</h1>",
    options
);
pdf.saveAs("styled_report.pdf");
JAVA

La configuración CssMediaType.PRINT indica al motor que aplique las reglas CSS de @media print, que muchos templates HTML usan para ocultar barras de navegación y aplicar diseños específicos de impresión. El método setJavaScriptTimeout es importante para páginas que usan bibliotecas de graficación en JavaScript (D3.js, Chart.js) o carga diferida de contenido: si el tiempo de espera es muy corto, el PDF capturará la página antes de que el JavaScript termine de renderizar, produciendo gráficos vacíos o secciones faltantes. Aumenta el tiempo de espera si al PDF renderizado le falta contenido esperado.

El método setDpi controla la resolución de imagen en la salida. El valor predeterminado (96 DPI) es apropiado para documentos en pantalla. Para PDFs que se imprimiran o mostrarán en pantallas de alta resolución, utiliza 150 o 300 DPI. Valores de DPI más altos aumentan el tamaño del archivo proporcionalmente. Consulta el ejemplo de configuración de generación de PDF para ver la lista completa de propiedades configurables.


¿Cómo añado encabezados y pies de página?

IronPDF admite tanto encabezados y pies de página basados en texto como basados en HTML. Los encabezados de texto usan un objeto TextHeaderFooter con tokens de formato ({page}, {total-pages}, {date}) que se resuelven automáticamente en el tiempo de renderización.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.headerfooter.*;

// Create a text-based header and footer
TextHeaderFooter header = new TextHeaderFooter();
header.setCenterText("Confidential — {date}");
header.setFontSize(10);

TextHeaderFooter footer = new TextHeaderFooter();
footer.setLeftText("My Company, Inc.");
footer.setRightText("Page {page} of {total-pages}");
footer.setFontSize(9);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Annual Report</h1>");
pdf.addTextHeaders(header);
pdf.addTextFooters(footer);
pdf.saveAs("report_with_headers.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/headers-footers.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.headerfooter.*;

// Create a text-based header and footer
TextHeaderFooter header = new TextHeaderFooter();
header.setCenterText("Confidential — {date}");
header.setFontSize(10);

TextHeaderFooter footer = new TextHeaderFooter();
footer.setLeftText("My Company, Inc.");
footer.setRightText("Page {page} of {total-pages}");
footer.setFontSize(9);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Annual Report</h1>");
pdf.addTextHeaders(header);
pdf.addTextFooters(footer);
pdf.saveAs("report_with_headers.pdf");
JAVA

Los tokens {page} y {total-pages} producen valores como "3 de 12" en el pie de página y se actualizan automáticamente a medida que cambia el recuento de páginas, por lo que no es necesario conocer el recuento final de páginas antes de renderizar. El token {date} inserta la fecha actual usando la configuración local del sistema. Otros tokens disponibles incluyen {time}, {document-title}, y {url}.

Encabezados y pies de página añadidos con addTextHeaders y addTextFooters se aplican a cada página del documento por defecto. Pasa el parámetro de rango de páginas opcional para restringirlos a páginas específicas, por ejemplo, para omitir el encabezado en la página de portada.

Para encabezados estilizados que requieran logotipos, colores de marca o diseños personalizados, usa HtmlHeaderFooter en su lugar: acepta una cadena HTML completa y la renderiza tal como el cuerpo de la página. Consulta el ejemplo de encabezados y pies de página personalizados para ver el patrón completo del encabezado HTML.


¿Cómo configuro los márgenes y el tamaño del papel?

Pasa una instancia ChromePdfRenderOptions con valores de margen y tamaño de papel configurados antes de llamar a cualquier método render*AsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
import com.ironsoftware.ironpdf.page.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Set uniform margins in millimeters
options.setMarginTop(20);
options.setMarginBottom(20);
options.setMarginLeft(15);
options.setMarginRight(15);

// Use A4 paper (default is Letter)
options.setPaperSize(PaperSize.A4);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<p>Page content here.</p>", options);
pdf.saveAs("a4_with_margins.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/margins-paper-size.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.render.*;
import com.ironsoftware.ironpdf.page.*;

ChromePdfRenderOptions options = new ChromePdfRenderOptions();

// Set uniform margins in millimeters
options.setMarginTop(20);
options.setMarginBottom(20);
options.setMarginLeft(15);
options.setMarginRight(15);

// Use A4 paper (default is Letter)
options.setPaperSize(PaperSize.A4);

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<p>Page content here.</p>", options);
pdf.saveAs("a4_with_margins.pdf");
JAVA

Los valores de margen están en milímetros. El enumerado PaperSize cubre tamaños estándar (A4, Carta, Legal, A3, y otros). Los desarrolladores que necesiten dimensiones no estándar pueden establecer un ancho y alto personalizado usando options.setCustomPaperWidth y options.setCustomPaperHeight. El ejemplo de tamaño de papel personalizado y el ejemplo de márgenes personalizados muestran los patrones de configuración completos.


¿Cómo aplico una marca de agua a un PDF?

Una marca de agua en IronPDF es HTML estampado sobre cada página con una opacidad configurable. Este enfoque da a los desarrolladores control total sobre la apariencia de la marca de agua — cualquier elemento HTML, imagen, o texto estilizado puede servir como sello.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
import com.ironsoftware.ironpdf.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Confidential Report</h1><p>Internal use only.</p>");

// Define the watermark using an HTML string
String watermarkHtml = "<h1 style='color:rgba(200,0,0,0.3); transform:rotate(-45deg);'>DRAFT</h1>";

// Stamp the watermark on all pages at 50% opacity
pdf.applyStamp(watermarkHtml);

pdf.saveAs("draft_watermark.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/watermark.java
import com.ironsoftware.ironpdf.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Confidential Report</h1><p>Internal use only.</p>");

// Define the watermark using an HTML string
String watermarkHtml = "<h1 style='color:rgba(200,0,0,0.3); transform:rotate(-45deg);'>DRAFT</h1>";

// Stamp the watermark on all pages at 50% opacity
pdf.applyStamp(watermarkHtml);

pdf.saveAs("draft_watermark.pdf");
JAVA

El método applyStamp acepta un parámetro HtmlStampOptions para posicionamiento preciso: centro, esquina superior izquierda, desplazamientos de píxeles personalizados y z-index (primer plano o fondo). Configurar el sello como un fondo lo coloca detrás del texto para que el documento siga siendo legible. Configurarla como un primer plano lo coloca encima, lo cual es más difícil de oscurecer al imprimir.

ConsejosPara producir una marca de agua de mosaico repetido — del tipo que IronPDF aplica en modo de prueba — renderiza una cuadrícula de elementos de texto rotado en la cadena de sello HTML y dimensiona el elemento para llenar toda la página.

Consulta la guía de cómo hacer una marca de agua personalizada para ejemplos que cubren marcas de agua de fondo, patrones de mosaico, y eliminar marcas de agua al actualizar la licencia.


¿Cómo fusiono múltiples PDFs en uno?

PdfDocument.merge combina dos o más objetos PdfDocument en orden y devuelve un único documento nuevo. Este es el enfoque preferido para ensamblar reportes a partir de secciones componentes, añadir páginas de portada, o unir secciones por usuario de un trabajo por lotes.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
import java.util.List;

// Render two separate HTML documents into PDFs
PdfDocument cover    = PdfDocument.renderHtmlAsPdf("<h1>Cover Page</h1>");
PdfDocument body     = PdfDocument.renderHtmlAsPdf("<h1>Report Body</h1><p>Section one...</p>");
PdfDocument appendix = PdfDocument.renderHtmlAsPdf("<h2>Appendix A</h2>");

// Merge all three into a single PDF in the specified order
List<PdfDocument> parts = Arrays.asList(cover, body, appendix);
PdfDocument merged = PdfDocument.merge(parts);
merged.saveAs("full_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/merge-pdfs.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;
import java.util.List;

// Render two separate HTML documents into PDFs
PdfDocument cover    = PdfDocument.renderHtmlAsPdf("<h1>Cover Page</h1>");
PdfDocument body     = PdfDocument.renderHtmlAsPdf("<h1>Report Body</h1><p>Section one...</p>");
PdfDocument appendix = PdfDocument.renderHtmlAsPdf("<h2>Appendix A</h2>");

// Merge all three into a single PDF in the specified order
List<PdfDocument> parts = Arrays.asList(cover, body, appendix);
PdfDocument merged = PdfDocument.merge(parts);
merged.saveAs("full_report.pdf");
JAVA

Las páginas de cada documento fuente aparecen en la salida fusionada en el orden que especifica la lista de fuentes. El documento combinado no hereda ninguna metadatos de ninguna fuente individual: actualiza meta.title y otras propiedades del documento usando PdfDocument.getPdfMetaData() después de combinar si esos campos son importantes para el consumidor final.

El método merge también tiene una sobrecarga de dos argumentos que acepta exactamente dos instancias PdfDocument. Para fusiones masivas de muchos documentos, usa la sobrecarga de lista — es más eficiente que encadenar múltiples llamadas de dos argumentos porque procesa todas las fuentes en una sola pasada.

Por favor notaCada fuente PdfDocument en la lista de combinación sigue siendo válida e inalterada después de la llamada. La instancia merged es un documento nuevo e independiente. Libera los documentos fuente con su método close() cuando ya no se necesiten para liberar los recursos nativos asociados.


¿Cómo añado o elimino páginas de un PDF?

Las páginas individuales se pueden copiar de un documento a otro, o eliminar por completo, utilizando los métodos PdfDocument.copyPage, PdfDocument.copyPages, y PdfDocument.removePages.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;

// Generate a multi-page document using CSS page breaks
PdfDocument report = PdfDocument.renderHtmlAsPdf(
    "<p>Page 1 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 2 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 3 content</p>"
);

// Remove page 2 (zero-indexed — page index 1)
report.removePages(Arrays.asList(1));

// Save the two-page result
report.saveAs("two_page_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/page-operations.java
import com.ironsoftware.ironpdf.*;
import java.util.Arrays;

// Generate a multi-page document using CSS page breaks
PdfDocument report = PdfDocument.renderHtmlAsPdf(
    "<p>Page 1 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 2 content</p>" +
    "<div style='page-break-after:always;'></div>" +
    "<p>Page 3 content</p>"
);

// Remove page 2 (zero-indexed — page index 1)
report.removePages(Arrays.asList(1));

// Save the two-page result
report.saveAs("two_page_report.pdf");
JAVA

Los índices de página en IronPDF empiezan en cero. Al eliminar múltiples páginas, pasa todos los índices en una sola llamada removePages en lugar de llamarla varias veces en un ciclo, porque cada eliminación desplaza los índices de página posteriores. Pasar la lista completa de una vez evita la deriva de índices. Por ejemplo, para eliminar las páginas 2 y 4 de un documento de cinco páginas, pasa Arrays.asList(1, 3) — no dos llamadas separadas.

Para insertar páginas desde un PDF externo — por ejemplo, añadir una divulgación legal de un template estático — utiliza PdfDocument.insertPdf para unir el documento externo en una posición específica. El conteo de páginas del documento receptor se actualiza inmediatamente después de la inserción.

La propiedad CSS css page-break-after:always es la manera estándar de forzar saltos de página en HTML que se renderizará en PDF. IronPDF también admite la propiedad CSS break-after: page más reciente. Ambos enfoques producen saltos de página predecibles sin requerir ningún código Java especial.


¿Cómo protejo con contraseña un PDF en Java?

IronPDF admite dos contraseñas distintas en un PDF: una contraseña de propietario que controla los permisos de edición, impresión y copia, y una contraseña de usuario que controla la apertura del documento. Ambas se configuran a través de la clase SecurityOptions.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.security.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Secure Document</h1>");

SecurityOptions security = new SecurityOptions();

// Require a password to open the document
security.setUserPassword("user123");

// Require a separate password to edit, print, or copy content
security.setOwnerPassword("owner456");

// Restrict printing to prevent unauthorized reproduction
security.setAllowUserPrinting(PrintOptions.FullPrintQuality);

PdfSecurityManager securityManager = new PdfSecurityManager(pdf);
securityManager.setSecurityOptions(security);

pdf.saveAs("secure_document.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/password-protect.java
import com.ironsoftware.ironpdf.*;
import com.ironsoftware.ironpdf.security.*;

PdfDocument pdf = PdfDocument.renderHtmlAsPdf("<h1>Secure Document</h1>");

SecurityOptions security = new SecurityOptions();

// Require a password to open the document
security.setUserPassword("user123");

// Require a separate password to edit, print, or copy content
security.setOwnerPassword("owner456");

// Restrict printing to prevent unauthorized reproduction
security.setAllowUserPrinting(PrintOptions.FullPrintQuality);

PdfSecurityManager securityManager = new PdfSecurityManager(pdf);
securityManager.setSecurityOptions(security);

pdf.saveAs("secure_document.pdf");
JAVA

La configuración AllowUserPrinting acepta un enumerado PrintOptions: FullPrintQuality, LowQualityPrint, o NoPrint. Cuando la contraseña de propietario está configurada pero la contraseña de usuario queda vacía, el documento se abre sin contraseña pero la edición y otras operaciones requieren la contraseña de propietario en un editor de PDF.

AdvertenciaLa protección por contraseña de PDF encripta el archivo pero no es un sustituto para sistemas de control de acceso adecuados. Usuarios determinados con herramientas especializadas pueden intentar ataques de fuerza bruta en contraseñas débiles. Usa contraseñas fuertes y generadas aleatoriamente para documentos que requieran verdadera seguridad.


¿Cómo convierto una plantilla HTML con datos dinámicos?

Generar PDFs a partir de una plantilla HTML impulsada por datos es uno de los casos de uso de producción más comunes para IronPDF. El enfoque estándar es construir la cadena HTML en Java usando una biblioteca de plantillas u operaciones de cadena, luego pasar la cadena terminada a renderHtmlAsPdf.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
import com.ironsoftware.ironpdf.*;

// Simulate data from a database or service layer
String customerName  = "Acme Corp";
String invoiceNumber = "INV-20240501";
String totalAmount   = "$1,250.00";
String dueDate       = "2024-06-01";

// Build the HTML template with real data injected
String html = "<!DOCTYPE html><html><head>" +
    "<style>body{font-family:Arial,sans-serif;margin:40px;}" +
    "table{width:100%;border-collapse:collapse;}" +
    "th,td{border:1px solid #ccc;padding:8px;text-align:left;}" +
    "th{background:#f4f4f4;}</style></head><body>" +
    "<h1>Invoice</h1>" +
    "<p><strong>Customer:</strong> " + customerName + "</p>" +
    "<p><strong>Invoice #:</strong> " + invoiceNumber + "</p>" +
    "<table><tr><th>Description</th><th>Amount</th></tr>" +
    "<tr><td>Professional Services</td><td>" + totalAmount + "</td></tr>" +
    "</table>" +
    "<p><strong>Due Date:</strong> " + dueDate + "</p>" +
    "</body></html>";

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);
pdf.saveAs(invoiceNumber + ".pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/dynamic-template.java
import com.ironsoftware.ironpdf.*;

// Simulate data from a database or service layer
String customerName  = "Acme Corp";
String invoiceNumber = "INV-20240501";
String totalAmount   = "$1,250.00";
String dueDate       = "2024-06-01";

// Build the HTML template with real data injected
String html = "<!DOCTYPE html><html><head>" +
    "<style>body{font-family:Arial,sans-serif;margin:40px;}" +
    "table{width:100%;border-collapse:collapse;}" +
    "th,td{border:1px solid #ccc;padding:8px;text-align:left;}" +
    "th{background:#f4f4f4;}</style></head><body>" +
    "<h1>Invoice</h1>" +
    "<p><strong>Customer:</strong> " + customerName + "</p>" +
    "<p><strong>Invoice #:</strong> " + invoiceNumber + "</p>" +
    "<table><tr><th>Description</th><th>Amount</th></tr>" +
    "<tr><td>Professional Services</td><td>" + totalAmount + "</td></tr>" +
    "</table>" +
    "<p><strong>Due Date:</strong> " + dueDate + "</p>" +
    "</body></html>";

PdfDocument pdf = PdfDocument.renderHtmlAsPdf(html);
pdf.saveAs(invoiceNumber + ".pdf");
JAVA

Para proyectos más grandes, considera una biblioteca de plantillas Java como Thymeleaf o Freemarker para gestionar plantillas HTML como archivos separados, inyectar datos a través de un objeto de contexto, y mantener la sintaxis de plantillas más limpia que con la concatenación de cadenas. Ambas bibliotecas producen una cadena HTML plana que pasa directamente a renderHtmlAsPdf.

ConsejosAl generar PDFs en un trabajo por lotes — por ejemplo, una factura por cliente — instancia ChromePdfRenderOptions una vez antes del ciclo y reutiliza la misma instancia para cada llamada de renderizado. Crear un nuevo objeto de opciones por llamada agrega una sobrecarga de asignación de objetos innecesaria.


¿Cómo extraigo texto de un PDF en Java?

PdfDocument.extractAllText lee todo el contenido de texto de cada página en un PDF y lo devuelve como una sola cadena. Esto es útil para indexación de búsqueda, extracción de datos, y validación de contenido después de renderizar.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Open an existing PDF (or use the result of a render call)
PdfDocument pdf = PdfDocument.fromFile(Paths.get("output.pdf"));

// Extract all text content as a plain string
String text = pdf.extractAllText();
System.out.println(text);
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/extract-text.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

// Open an existing PDF (or use the result of a render call)
PdfDocument pdf = PdfDocument.fromFile(Paths.get("output.pdf"));

// Extract all text content as a plain string
String text = pdf.extractAllText();
System.out.println(text);
JAVA

La cadena devuelta preserva el orden de lectura del texto en cada página pero no incluye el formato. Los espacios en blanco entre columnas y celdas de tabla se representan como espacios. Para PDFs que contienen múltiples secciones lógicas, extractTextFromPage(int pageIndex) aísla el texto de una sola página, lo cual es más eficiente al procesar documentos grandes una página a la vez.

La extracción de texto solo funciona en PDFs donde el texto se almacena como objetos de texto reales en la estructura del PDF — los PDFs generados por renderHtmlAsPdf siempre califican. Los documentos escaneados donde las páginas son imágenes requieren OCR antes de que la extracción de texto sea posible. IronOCR es una biblioteca complementaria de Iron Software que agrega capacidades de OCR a aplicaciones Java y .NET.

Para la extracción de imágenes, utiliza pdf.extractAllImages() que devuelve una lista de objetos BufferedImage, uno por cada imagen encontrada en el documento. Consulta el ejemplo de extracción de texto de PDF y el ejemplo de extracción de imágenes de PDF para patrones de código completos.


¿Cómo comprimo un archivo PDF?

PdfDocument.compressImages reduce el tamaño del archivo al re-codificar imágenes embebidas a una calidad más baja. Esto es particularmente efectivo para PDFs que fueron generados a partir de páginas web que contienen fotos grandes o imágenes de banner.

//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

PdfDocument pdf = PdfDocument.fromFile(Paths.get("large_report.pdf"));

// Compress embedded images to 60% quality (0–100 scale)
pdf.compressImages(60);

pdf.saveAs("compressed_report.pdf");
//:path=/static-assets/pdf/content-code-examples/tutorials/html-to-pdf/compress-pdf.java
import com.ironsoftware.ironpdf.*;
import java.nio.file.Paths;

PdfDocument pdf = PdfDocument.fromFile(Paths.get("large_report.pdf"));

// Compress embedded images to 60% quality (0–100 scale)
pdf.compressImages(60);

pdf.saveAs("compressed_report.pdf");
JAVA

Los valores de calidad entre 50 y 75 típicamente reducen el tamaño del archivo en un 40–70% con una fidelidad visual aceptable para lectura en pantalla. Valores por debajo de 40 pueden introducir artefactos visibles en fotos, aunque pueden ser aceptables para diagramas y capturas de pantalla con grandes áreas de color sólido.

El método sobrecargado compressImages(int quality, boolean scaleExistingImages) también acepta un booleano para indicar si se debe escalar imágenes que son más grandes que su tamaño mostrado en el PDF. Configurar esto a true reduce aún más el tamaño del archivo al eliminar la resolución excesiva que ocurre cuando una imagen de alta resolución se embebe pero se muestra en un tamaño mucho más pequeño en la página. Esto es común en conversiones web a PDF donde las imágenes se sirven a una resolución 2x para pantallas retina.

El ejemplo de compresión de PDF demuestra la compresión por lotes a través de documentos de múltiples páginas, incluyendo cómo verificar la reducción de tamaño después de la compresión.


Próximos pasos

Este tutorial cubrió los tres métodos de conversión de HTML a PDF, instalación, configuración de licencia, opciones de renderizado, encabezados y pies de página, configuraciones de diseño de página, extracción de texto, y compresión de archivos.

Para ir más allá, explora estos recursos en la documentación de IronPDF for Java:

  1. Configuración de generación de PDFConfigura DPI, zoom, tiempo de espera, y tipo de medio CSS para un control de renderizado preciso.
  2. Encabezados y pies de páginaAñade encabezados y pies de página en HTML con logotipos de marca y diseños personalizados.
  3. Diseño de página — Establece márgenes personalizados y dimensiones de papel para salida lista para impresión.
  4. Marcas de agua — Aplica marcas de agua de fondo y de primer plano para la seguridad del documento.
  5. Extracción de contenidoExtraer texto de PDFs y extraer imágenes para procesamiento posterior.
  6. Compresión de archivosReducir el tamaño de archivo PDF para almacenamiento y envío por correo electrónico.
  7. Referencia de API — Explore la referencia de la API de IronPDF for Java completa para cada clase y método.

Inicie una prueba gratuita para comenzar a convertir HTML a PDF en su aplicación Java hoy. Cuando esté listo para implementar, vea las opciones de licencia para encontrar el plan que se adapte a su proyecto.

Preguntas Frecuentes

¿Cómo convierto una cadena HTML a PDF en Java?

Llame a PdfDocument.renderHtmlAsPdf con su cadena HTML. Pase una ruta base opcional como segundo argumento para que las referencias relativas de CSS, imagen y script se resuelvan correctamente. Llame a guardarComo en el PdfDocument devuelto para escribir el archivo.

¿Cómo convierto una URL a PDF en Java?

Llame a PdfDocument.renderUrlAsPdf con la URL completamente calificada. IronPDF obtiene la página, espera a que JavaScript se ejecute, y renderiza el DOM completamente cargado a PDF.

¿Cómo convierto un archivo HTML local a PDF en Java?

Llame a PdfDocument.renderHtmlFileAsPdf con una ruta de archivo absoluta. Todas las referencias de recursos relativas en el archivo HTML se resuelven automáticamente en relación con el directorio de ese archivo.

¿Cómo instalo IronPDF en un proyecto Java usando Maven?

Añada la dependencia de IronPDF a pom.xml con groupId com.ironsoftware y artifactId ironpdf, luego ejecute mvn install desde el directorio raíz del proyecto.

¿Cómo elimino la marca de agua de los PDFs generados por IronPDF?

Llama a License.setLicenseKey con una clave de licencia válida antes de cualquier llamada de renderizado. Sin una clave de licencia, IronPDF estampa una marca de agua en mosaico en cada página.

¿Cómo agrego encabezados y pies de página a un PDF en Java?

Crea una instancia de TextHeaderFooter, establece sus propiedades de texto usando tokens de formato como {page} y {total-pages}, luego llama a pdf.addTextHeaders y pdf.addTextFooters. Para encabezados con estilo y logotipos, utiliza HtmlHeaderFooter en su lugar.

¿Cómo configuro los márgenes de página y el tamaño de papel del PDF en Java?

Crea una instancia de ChromePdfRenderOptions y llama a setMarginTop, setMarginBottom, setMarginLeft, setMarginRight (en milímetros) y setPaperSize con un valor de enumeración PaperSize. Pasa las opciones a cualquier método de renderizado.

¿Cómo combino varios PDFs en uno solo en Java?

Crea una List con los documentos en el orden deseado y pásalo a PdfDocument.merge. El método devuelve un nuevo PdfDocument que contiene todas las páginas de todas las fuentes.

¿Cómo protejo con contraseña un PDF en Java?

Crea una instancia de SecurityOptions, llama a setUserPassword y setOwnerPassword, luego aplícalo a través de PdfSecurityManager antes de guardar el documento.

¿Cómo extraigo texto de un PDF en Java?

Llama a pdf.extractAllText() para recuperar todo el contenido de texto como una sola cadena. Usa extractTextFromPage(int pageIndex) para extraer texto de una página específica.

Darrius Serrant
Ingeniero de Software Full Stack (WebOps)

Darrius Serrant tiene una licenciatura en Ciencias de la Computación de la Universidad de Miami y trabaja como Ingeniero de Marketing WebOps Full Stack en Iron Software. Atraído por la programación desde joven, vio la computación como algo misterioso y accesible, convirtiéndolo en el ...

Leer más
¿Listo para empezar?
Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida?
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.