Convertir HTML a PDF en Node.js

HTML a PDF NodeJS

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

La capacidad de crear PDFs de alta fidelidad a partir de HTML, CSS y JavaScript en bruto es la característica más poderosa y popular de IronPDF. Este tutorial es una introducción completa para ayudar a los desarrolladores de Node a aprovechar IronPDF para incorporar la generación de HTML a PDF en sus propios proyectos.

IronPDF es una biblioteca de API de alto nivel que ayuda a los desarrolladores a implementar capacidades de procesamiento de PDF potentes y robustas en aplicaciones de software de manera rápida y sencilla. IronPDF está disponible en múltiples lenguajes de programación. Para una cobertura detallada sobre cómo crear PDFs en .NET, Java, y Python, consulte las páginas oficiales de documentación. Este tutorial cubre su uso en proyectos de Node.js.



Empezando

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

Primer Paso:
green arrow pointer

Instalar la biblioteca IronPDF for Node.js

Instala el paquete de IronPDF Node.js ejecutando el comando NPM que se proporciona a continuación en tu proyecto de Node elegido:

npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
SHELL

También puedes descargar e instalar el paquete de IronPDF manualmente.

Instalación manual del motor IronPDF (opcional)

IronPDF para Node.js actualmente requiere un Binario del Motor IronPDF para funcionar correctamente.

Instala el binario del Motor IronPDF instalando el paquete adecuado para tu sistema operativo:

Por favor notaLa instalación del motor IronPDF es opcional, ya que @ironpdf descargará e instalará automáticamente el binario adecuado para su navegador y sistema operativo desde NPM en su primera ejecución. Sin embargo, la instalación explícita de este binario será vital en situaciones en las que el acceso a Internet sea limitado, reducido o no deseado.

Aplicar una clave de licencia (opcional)

Por defecto, IronPDF marcará todos los documentos que genere o modifique con una marca de agua de fondo titulada.

Figura 1 Obtén una clave de licencia en ironpdf.com/nodejs/licensing/ para generar documentos PDF sin marcas de agua.

Para usar IronPDF sin la marca del agua adicional, debes establecer la propiedad licenseKey en el objeto global IronPdfGlobalConfig con una clave de licencia válida. El código fuente para hacer esto se presenta a continuación:

import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";

// Get the global config object
var config = IronPdfGlobalConfig.getConfig();

// Set the license key for IronPDF
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
import { IronPdfGlobalConfig } from "@ironsoftware/ironpdf";

// Get the global config object
var config = IronPdfGlobalConfig.getConfig();

// Set the license key for IronPDF
config.licenseKey = "{YOUR-LICENSE-KEY-HERE}";
JAVASCRIPT

Compra una clave de licencia desde nuestra página de licencias, o contáctanos para obtener una clave de licencia de prueba gratuita.

Por favor notaLa clave de licencia y otros ajustes de configuración global, deben establecerse antes de utilizar otras funciones de la biblioteca para garantizar el mejor rendimiento y una funcionalidad adecuada.

Las siguientes secciones de este tutorial asumirán que tenemos una clave de licencia y que la hemos establecido en un archivo JavaScript separado llamado config.js. Importamos este script dondequiera que utilicemos la funcionalidad de IronPDF:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script
// ...
JAVASCRIPT

Convertir HTML a PDF

La versión de Node de la biblioteca IronPDF ofrece tres enfoques para crear archivos PDF a partir de contenido HTML:

  1. A partir de una cadena de código HTML
  2. A partir de un archivo HTML local
  3. De un sitio web en línea

Esta sección explicará detalladamente los tres métodos.

Crear un archivo PDF a partir de una cadena HTML

PdfDocument.fromHtml es un método que permite generar PDFs a partir de cadenas de marcado de página web en bruto.

Este método ofrece la mayor flexibilidad de los tres enfoques. Esto se debe a que los datos de la cadena HTML pueden provenir prácticamente de cualquier parte: archivos de texto, flujos de datos, una plantilla HTML, datos HTML generados, etc.

El siguiente ejemplo de código demuestra cómo usar el método PdfDocument.fromHtml en la práctica:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Create a PDF from the HTML String "Hello world!"
const pdf = await PdfDocument.fromHtml("<h1>Hello from IronPDF!</h1>");

// Save the PDF document to the file system.
await pdf.saveAs("html-string-to-pdf.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Create a PDF from the HTML String "Hello world!"
const pdf = await PdfDocument.fromHtml("<h1>Hello from IronPDF!</h1>");

// Save the PDF document to the file system.
await pdf.saveAs("html-string-to-pdf.pdf");
JAVASCRIPT

Como se mostró anteriormente, llamamos al método PdfDocument.fromHtml con una cadena de texto que contiene el código de marcado para un elemento de encabezado de nivel uno.

PdfDocument.fromHtml devuelve una Promesa que se resuelve en una instancia de la clase PdfDocument. Un PdfDocument representa un archivo PDF que la biblioteca ha producido a partir de algún contenido fuente. Esta clase forma la piedra angular de la mayoría de las características principales de IronPDF, impulsando el uso significativo en la creación y edición de PDFs.

Finalmente, usamos el método saveAs en el PdfDocument para guardar el archivo en el disco. El archivo PDF guardado se muestra abajo.

Figura 2 The PDF generated from the HTML string "<h1>Hello from IronPDF!</h1>". Los archivos PDF que PdfDocument.fromHtml genera aparecen tal como lo haría el contenido de la página web.

Crear un archivo PDF a partir de un archivo HTML

PdfDocument.fromHtml no solo funciona con cadenas HTML. El método también acepta una ruta a un documento HTML local.

En nuestro siguiente ejemplo, trabajaremos con esta página web de muestra.

Figura 3 Nuestra página HTML de muestra tal como aparece en Google Chrome. Descarga esta página y otras similares desde el sitio web de File Samples: https://filesamples.com/samples/code/html/sample2.html

Las siguientes líneas de código convierten todo el documento de muestra en un PDF. En lugar de una cadena HTML, llamamos a PdfDocument.fromHtml con una ruta de archivo válida a nuestro archivo de muestra:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from an HTML File
const pdf = await PdfDocument.fromHtml("./sample2.html");

// Save the PDF document to the same folder as our project.
await pdf.saveAs("html-file-to-pdf-1.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from an HTML File
const pdf = await PdfDocument.fromHtml("./sample2.html");

// Save the PDF document to the same folder as our project.
await pdf.saveAs("html-file-to-pdf-1.pdf");
JAVASCRIPT

Hemos incluido el contenido del PDF resultante a continuación. Observa que IronPDF no solo conserva la apariencia del documento HTML original, sino que también mantiene la funcionalidad de enlaces, formularios y otros elementos interactivos comunes.

Figura 5 Este PDF fue generado a partir del ejemplo de código anterior. Compara su apariencia con la imagen anterior, ¡y nota la notable semejanza!

Si has examinado el código fuente de la página de muestra, notarás que es más complejo. Usa más tipos de elementos HTML (párrafos, listas desordenadas, saltos de línea, reglas horizontales, hipervínculos, imágenes, etc.) y también incluye una cierta cantidad de scripts (utilizados para configurar cookies).

IronPDF es capaz de renderizar contenido web que es mucho más complejo que lo que hemos estado usando hasta ahora. Para demostrar esto, consideremos la página siguiente:

Figura 6 Un artículo escrito sobre Puppeteer, una biblioteca Node popularizada por su capacidad para controlar Chrome mediante programación utilizando una instancia de navegador sin cabeza

La página que se muestra arriba es de un artículo escrito sobre la biblioteca Puppeteer para Node. Puppeteer ejecuta sesiones de navegador sin cabeza que los desarrolladores de Node utilizan para automatizar numerosas tareas del navegador en el lado del servidor o en el lado del cliente (una de las cuales incluye la generación de PDF en el servidor de HTML).

La nueva página tiene numerosas fuentes de activos (archivos CSS, imágenes, archivos de scripts, etc.) y utiliza un diseño aún más complejo. Para este siguiente ejemplo, convertiremos una copia guardada de esta página (junto con sus activos de origen) en un PDF con precisión de píxel.

El fragmento de código a continuación asume que la página está guardada en el mismo directorio que nuestro proyecto como "sample4.html":

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from even more complex HTML code.
PdfDocument.fromHtml("./sample4.html").then(async (pdf) => {
    return await pdf.saveAs("html-file-to-pdf-2.pdf");
});
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render a PDF from even more complex HTML code.
PdfDocument.fromHtml("./sample4.html").then(async (pdf) => {
    return await pdf.saveAs("html-file-to-pdf-2.pdf");
});
JAVASCRIPT

La siguiente imagen muestra los resultados del fragmento de código anterior.

Figura 7 Si se ve bien en Google Chrome, entonces se verá bien cuando se convierta en PDF. Esto incluye diseños de páginas pesadas en CSS y JavaScript.

Crear un archivo PDF a partir de una URL

IronPDF puede convertir cadenas HTML y archivos HTML de cualquier tamaño y complejidad. No estás limitado solo a usar marcado bruto de cadenas y archivos, sin embargo. IronPDF también puede solicitar HTML desde una URL.

Considera el artículo de Wikipedia ubicado en https://en.wikipedia.org/wiki/PDF.

Figura 8 El artículo de Wikipedia sobre el formato PDF, tal como aparece en un navegador web compatible con estándares.

Usa este código fuente para convertir este artículo de Wikipedia en un PDF:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Convert the Web Page to a pixel-perfect PDF file.
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");

// Save the document.
await pdf.saveAs("url-to-pdf.pdf");
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Convert the Web Page to a pixel-perfect PDF file.
const pdf = await PdfDocument.fromUrl("https://en.wikipedia.org/wiki/PDF");

// Save the document.
await pdf.saveAs("url-to-pdf.pdf");
JAVASCRIPT

Arriba usamos PdfDocument.fromUrl para convertir la página web en un PDF en unas pocas líneas de código. IronPDF obtendrá el código HTML para la dirección web por ti y lo renderizará sin problemas. ¡No se requieren archivos HTML ni cadenas de texto!

[Figura 8](/static-assets/ironpdf-nodejs tutorials/html-to-pdf/html-to-pdf-9.webp) El PDF generado al llamar a PdfDocument.fromUrl en un artículo de Wikipedia. Ten en cuenta sus similitudes con la página web original.

Crear un archivo PDF a partir de un archivo Zip

Usa PdfDocument.fromZip para convertir un archivo HTML específico ubicado en un archivo comprimido (zip) en un PDF.

Por ejemplo, supongamos que tenemos un archivo Zip en el directorio del proyecto con la siguiente estructura interna:

html-zip.zip
├─ index.html
├─ style.css
├─ logo.png

El archivo index.html contiene el código:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Hello world!</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <h1>Hello from IronPDF!</h1>
    <a href="https://ironpdf.com/nodejs/">
      <img src="logo.png" alt="IronPDF for Node.js">
    </a>
  </body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Hello world!</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <h1>Hello from IronPDF!</h1>
    <a href="https://ironpdf.com/nodejs/">
      <img src="logo.png" alt="IronPDF for Node.js">
    </a>
  </body>
</html>
HTML

style.css declara cinco reglas de CSS:

@font-face {
  font-family: 'Gotham-Black';
  src: url('gotham-black-webfont.eot?') format('embedded-opentype'), 
       url('gotham-black-webfont.woff2') format('woff2'), 
       url('gotham-black-webfont.woff') format('woff'), 
       url('gotham-black-webfont.ttf') format('truetype'), 
       url('gotham-black-webfont.svg') format('svg');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  margin-left: auto;
  margin-right: auto;
  margin-top: 200px;
  margin-bottom: auto;
  color: white;
  background-color: black;
  text-align: center;
  font-family: "Helvetica"
}

h1 {
  font-family: "Gotham-Black";
  margin-bottom: 70px;
  font-size: 32pt;
}

img {
  width: 400px;
  height: auto;
}

p {
  text-decoration: underline;
  font-size: smaller;
}

Por último, logo.png muestra el logotipo de nuestro producto:

Figura 10 La imagen de muestra dentro de un archivo zip HTML hipotético.

Al llamar al método fromZip, especifica una ruta válida al zip en el primer argumento, junto con un objeto JSON que establece la propiedad mainHtmlFile con el nombre del archivo HTML del zip que queremos convertir.

Convertimos el archivo index.html dentro de la carpeta zip de manera similar:

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render the HTML from a zip archive
PdfDocument.fromZip("./html-zip.zip", {
  mainHtmlFile: "index.html"
}).then(async (pdf) => {
  return await pdf.saveAs("html-zip-to-pdf.pdf");
});
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Render the HTML from a zip archive
PdfDocument.fromZip("./html-zip.zip", {
  mainHtmlFile: "index.html"
}).then(async (pdf) => {
  return await pdf.saveAs("html-zip-to-pdf.pdf");
});
JAVASCRIPT

[Figura 10](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-11.webp) Creación de PDF usando la función PdfDocument.fromZip. Esta función renderiza correctamente el código HTML contenido en el archivo ZIP, con sus activos contenidos.

Opciones avanzadas de generación de HTML a PDF

La interfaz ChromePdfRenderOptions permite a los desarrolladores de Node modificar el comportamiento de renderizado HTML de la biblioteca. Las propiedades expuestas allí permiten una personalización granular de la apariencia de los PDF antes de la renderización del PDF. Además, hacen posible manejar casos particulares de conversión de HTML a PDF.

IronPDF renderiza nuevos PDFs inicialmente utilizando algunos valores predeterminados de ChromePdfRenderOptions. Puedes consultar estos valores preestablecidos por ti mismo llamando a la función defaultChromePdfRenderOptions:

import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

// Retrieve a ChromePdfRenderOptions object with default settings.
var options = defaultChromePdfRenderOptions();
import { defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";

// Retrieve a ChromePdfRenderOptions object with default settings.
var options = defaultChromePdfRenderOptions();
JAVASCRIPT

Esta sección pasará rápidamente por los casos de uso de renderizado HTML a PDF más populares que requieren el uso de la interfaz ChromePdfRenderOptions.

Cada subsección comenzará con los valores preestablecidos y los modificará según sea necesario para lograr el resultado objetivo.

Personalizar la salida de generación de PDF

Añadir encabezados y pies de página personalizados

Con las propiedades textHeader y textFooter, puedes agregar contenido de encabezado y/o pie de página personalizados a los PDFs recién renderizados.

El ejemplo a continuación crea una versión PDF de la página de inicio de búsqueda de Google con un encabezado y pie de página personalizados hechos de contenido textual. Usamos líneas divisorias para separar este contenido del cuerpo de la página. También usamos fuentes distintas en el encabezado y el pie de página para aclarar las distinciones.

import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Build a Custom Text-Based Header
options.textHeader = {
  centerText: "https://www.adobe.com",
  dividerLine: true,
  font: AffixFonts.CourierNew,
  fontSize: 12,
  leftText: "URL to PDF"
};

// Build a custom Text-Based Footer
options.textFooter = {
  centerText: "IronPDF for Node.js",
  dividerLine: true,
  fontSize: 14,
  font: AffixFonts.Helvetica,
  rightText: "HTML to PDF in Node.js"
};

// Render a PDF from a URL
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-custom-headers-footers-1.pdf");
});
import { PdfDocument, defaultChromePdfRenderOptions, AffixFonts } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Build a Custom Text-Based Header
options.textHeader = {
  centerText: "https://www.adobe.com",
  dividerLine: true,
  font: AffixFonts.CourierNew,
  fontSize: 12,
  leftText: "URL to PDF"
};

// Build a custom Text-Based Footer
options.textFooter = {
  centerText: "IronPDF for Node.js",
  dividerLine: true,
  fontSize: 14,
  font: AffixFonts.Helvetica,
  rightText: "HTML to PDF in Node.js"
};

// Render a PDF from a URL
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-custom-headers-footers-1.pdf");
});
JAVASCRIPT

El código fuente produce este PDF:

[Figura 11](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-12.webp) Se creó una nueva página en formato PDF, generada a partir de la página de inicio de Google. Observa la inclusión de encabezados y pies de página adicionales.

Para tener aún más control sobre el diseño, la posición y el contenido incluido en el encabezado y el pie de página, también puedes definirlos usando HTML en bruto en lugar de texto.

En el bloque de código siguiente, utilizamos HTML para incorporar contenido más rico en el encabezado y el pie de página. En el encabezado, ponemos en negrita y alineamos al centro la URL de la página; en el pie de página, insertamos y centramos un logotipo.

import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Define a rich HTML header
options.htmlHeader = {
  htmlFragment: "<strong>https://www.google.com/</strong>",
  dividerLine: true,
  dividerLineColor: "blue",
  loadStylesAndCSSFromMainHtmlDocument: true,
};

// Define a rich HTML footer
options.htmlFooter = {
  htmlFragment: "<img src='logo.png' alt='IronPDF for Node.js' style='display: block; width: 150px; height: auto; margin-left: auto; margin-right: auto;'>",
  dividerLine: true,
  loadStylesAndCSSFromMainHtmlDocument: true
};

// Render a PDF from a URL
await PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-html-headers-footers.pdf");
});
import { PdfDocument, defaultChromePdfRenderOptions } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Define a rich HTML header
options.htmlHeader = {
  htmlFragment: "<strong>https://www.google.com/</strong>",
  dividerLine: true,
  dividerLineColor: "blue",
  loadStylesAndCSSFromMainHtmlDocument: true,
};

// Define a rich HTML footer
options.htmlFooter = {
  htmlFragment: "<img src='logo.png' alt='IronPDF for Node.js' style='display: block; width: 150px; height: auto; margin-left: auto; margin-right: auto;'>",
  dividerLine: true,
  loadStylesAndCSSFromMainHtmlDocument: true
};

// Render a PDF from a URL
await PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("add-html-headers-footers.pdf");
});
JAVASCRIPT

La imagen de abajo muestra el resultado de estos cambios.

[Figura 12](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-13.webp) IronPDF para Node.js puede aplicar personalizaciones a tus páginas HTML mientras se convierten en PDFs.

Configuración de márgenes, tamaños de página, orientación de página y color

IronPDF admite configuraciones adicionales para definir márgenes de página personalizados, tamaños de página y orientaciones de página para PDFs recién convertidos.

import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Set top, left, right, and bottom page margins in millimeters. 
options.margin = {
  top: 50,
  bottom: 50,
  left: 60,
  right: 60
};
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;

// Create a PDF from the Google.com Home Page
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("set-margins-and-page-size.pdf");
});
import { PdfDocument, defaultChromePdfRenderOptions, PaperSize, FitToPaperModes, PdfPaperOrientation } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Initialize render options with default settings
var options = defaultChromePdfRenderOptions();

// Set top, left, right, and bottom page margins in millimeters. 
options.margin = {
  top: 50,
  bottom: 50,
  left: 60,
  right: 60
};
options.paperSize = PaperSize.A5;
options.fitToPaperMode = FitToPaperModes.FitToPage;
options.paperOrientation = PdfPaperOrientation.Landscape;
options.grayScale = true;

// Create a PDF from the Google.com Home Page
PdfDocument.fromUrl("https://www.google.com/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("set-margins-and-page-size.pdf");
});
JAVASCRIPT

En el bloque de código anterior, configuramos IronPDF para generar nuestro PDF de la página de inicio de Google en escala de grises utilizando orientación horizontal y con al menos 50 milímetros de espacio de margen. También lo configuramos para ajustar el contenido para el tamaño de papel A5.

Generar PDF a partir de páginas web dinámicas

Para las páginas web que contienen contenido que no está disponible inmediatamente y se renderiza al cargar la página, puede ser necesario pausar la renderización del contenido de esa página hasta que se hayan satisfecho ciertas condiciones.

Por ejemplo, el desarrollador puede querer generar un PDF que contenga contenido que solo aparece 15 segundos después de que se cargue la página. En otro caso, este mismo contenido puede aparecer solo una vez que se ejecute algún código complejo del lado del cliente.

Para manejar ambos casos límite (y muchos más), la versión de Node de IronPDF define el mecanismo WaitFor. Los desarrolladores pueden incluir esta propiedad en sus configuraciones ChromePdfRenderOptions para instruir al motor de renderizado de Chrome de IronPDF a convertir el contenido de una página cuando ocurran ciertos eventos.

El siguiente bloque de código configura a IronPDF para esperar 20 segundos antes de capturar el contenido de nuestra página de inicio como PDF:

import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait until 20 seconds has passed
// before rendering the web page as a PDF.
var options = defaultChromePdfRenderOptions();
options.waitFor = {
  type: WaitForType.RenderDelay,
  delay: 20000
}
PdfDocument.fromUrl("https://ironpdf.com/nodejs/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("waitfor-renderdelay.pdf");
});
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait until 20 seconds has passed
// before rendering the web page as a PDF.
var options = defaultChromePdfRenderOptions();
options.waitFor = {
  type: WaitForType.RenderDelay,
  delay: 20000
}
PdfDocument.fromUrl("https://ironpdf.com/nodejs/", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("waitfor-renderdelay.pdf");
});
JAVASCRIPT

El siguiente bloque de código configura a IronPDF para esperar hasta que se pueda seleccionar con éxito un elemento en un editor de texto SEO popular.

import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait up to 20 seconds for a specific element to appear
var options = defaultChromePdfRenderOptions();
options.waitFor = {
  type: WaitForType.HtmlElement,
  htmlQueryStr: "div.ProseMirror",
  maxWaitTime: 20000,
}
PdfDocument.fromUrl("https://app.surferseo.com/drafts/s/V7VkcdfgFz-dpkldsfHDGFFYf4jjSvvjsdf", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("waitfor-htmlelement.pdf");
});
import { PdfDocument, defaultChromePdfRenderOptions, WaitForType } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

// Configure the Chrome Renderer to wait up to 20 seconds for a specific element to appear
var options = defaultChromePdfRenderOptions();
options.waitFor = {
  type: WaitForType.HtmlElement,
  htmlQueryStr: "div.ProseMirror",
  maxWaitTime: 20000,
}
PdfDocument.fromUrl("https://app.surferseo.com/drafts/s/V7VkcdfgFz-dpkldsfHDGFFYf4jjSvvjsdf", { renderOptions: options }).then(async (pdf) => {
  return await pdf.saveAs("waitfor-htmlelement.pdf");
});
JAVASCRIPT

Generar PDF a partir de una plantilla HTML

En la sección final de este tutorial, aplicaremos todo el conocimiento introducido en las secciones anteriores para lograr una automatización muy práctica: generar uno o más PDFs utilizando una plantilla HTML.

La plantilla que utilizaremos para esta sección se muestra a continuación. Se adaptó de esta plantilla de factura accesible públicamente para incluir etiquetas de marcador de posición (por ejemplo, {COMPANY-NAME}, {FULL-NAME}, {INVOICE-NUMBER}, etc.) para contenido substituible.

Figura 13 Una plantilla de factura de muestra. Escribiremos código JavaScript adicional que agregará datos dinámicos a esta plantilla antes de generarlos en PDFs.

En el siguiente bloque de código fuente, cargaremos la plantilla HTML en un nuevo objeto PdfDocument, reemplazaremos los marcadores de posición que definimos con algunos datos de prueba ficticios, y luego guardaremos el objeto PdfDocument en el sistema de archivos.

import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

/**
 * Loads an HTML template from the file system.
 */
async function getTemplateHtml(fileLocation) {
  // Return promise for loading template file
  return PdfDocument.fromFile(fileLocation);
}

/**
 * Save the PDF document at a given location.
 */
async function generatePdf(pdf, location) {
  return pdf.saveAs(location);
}

/**
 * Use the PdfDocument.replaceText method to replace 
 * a specified placeholder with a provided value.
 */
async function addTemplateData(pdf, key, value) {
  return pdf.replaceText(key, value);
}

// Path to the template file
const template = "./sample-invoice.html";

// Load the template, replace placeholders, and save the PDF
getTemplateHtml(template).then(async (doc) => {
    // Replace placeholders with real data
    await addTemplateData(doc, "{FULL-NAME}", "Lizbeth Presland");
    await addTemplateData(doc, "{ADDRESS}", "678 Manitowish Alley, Portland, OG");
    await addTemplateData(doc, "{PHONE-NUMBER}", "(763) 894-4345");
    await addTemplateData(doc, "{INVOICE-NUMBER}", "787");
    await addTemplateData(doc, "{INVOICE-DATE}", "August 28, 2023");
    await addTemplateData(doc, "{AMOUNT-DUE}", "13,760.13");
    await addTemplateData(doc, "{RECIPIENT}", "Celestyna Farmar");
    await addTemplateData(doc, "{COMPANY-NAME}", "BrainBook");
    await addTemplateData(doc, "{TOTAL}", "13,760.13");
    await addTemplateData(doc, "{AMOUNT-PAID}", "0.00");
    await addTemplateData(doc, "{BALANCE-DUE}", "13,760.13");
    await addTemplateData(doc, "{ITEM}", "Training Sessions");
    await addTemplateData(doc, "{DESCRIPTION}", "60 Minute instruction");
    await addTemplateData(doc, "{RATE}", "3,440.03");
    await addTemplateData(doc, "{QUANTITY}", "4");
    await addTemplateData(doc, "{PRICE}", "13,760.13");
    return doc;
}).then(async (doc) => await generatePdf(doc, "html-template-to-pdf.pdf"));
import { PdfDocument } from "@ironsoftware/ironpdf";
import './config.js'; // Import the configuration script

/**
 * Loads an HTML template from the file system.
 */
async function getTemplateHtml(fileLocation) {
  // Return promise for loading template file
  return PdfDocument.fromFile(fileLocation);
}

/**
 * Save the PDF document at a given location.
 */
async function generatePdf(pdf, location) {
  return pdf.saveAs(location);
}

/**
 * Use the PdfDocument.replaceText method to replace 
 * a specified placeholder with a provided value.
 */
async function addTemplateData(pdf, key, value) {
  return pdf.replaceText(key, value);
}

// Path to the template file
const template = "./sample-invoice.html";

// Load the template, replace placeholders, and save the PDF
getTemplateHtml(template).then(async (doc) => {
    // Replace placeholders with real data
    await addTemplateData(doc, "{FULL-NAME}", "Lizbeth Presland");
    await addTemplateData(doc, "{ADDRESS}", "678 Manitowish Alley, Portland, OG");
    await addTemplateData(doc, "{PHONE-NUMBER}", "(763) 894-4345");
    await addTemplateData(doc, "{INVOICE-NUMBER}", "787");
    await addTemplateData(doc, "{INVOICE-DATE}", "August 28, 2023");
    await addTemplateData(doc, "{AMOUNT-DUE}", "13,760.13");
    await addTemplateData(doc, "{RECIPIENT}", "Celestyna Farmar");
    await addTemplateData(doc, "{COMPANY-NAME}", "BrainBook");
    await addTemplateData(doc, "{TOTAL}", "13,760.13");
    await addTemplateData(doc, "{AMOUNT-PAID}", "0.00");
    await addTemplateData(doc, "{BALANCE-DUE}", "13,760.13");
    await addTemplateData(doc, "{ITEM}", "Training Sessions");
    await addTemplateData(doc, "{DESCRIPTION}", "60 Minute instruction");
    await addTemplateData(doc, "{RATE}", "3,440.03");
    await addTemplateData(doc, "{QUANTITY}", "4");
    await addTemplateData(doc, "{PRICE}", "13,760.13");
    return doc;
}).then(async (doc) => await generatePdf(doc, "html-template-to-pdf.pdf"));
JAVASCRIPT

El código fuente anterior define tres funciones auxiliares asíncronas:

  • getTemplateHtml: utiliza el método PdfDocument.fromHtml para cargar una plantilla HTML en un nuevo objeto PdfDocument.
  • addTemplateData: utiliza el método PdfDocument.replaceText para sustituir un marcador de posición proporcionado (referido como clave), con su valor de datos de reemplazo.
  • generatePdf: guarda un PdfDocument en una ubicación de archivo dada.

Además, declaramos una variable const template para mantener la ubicación de nuestro archivo de plantilla HTML. El PDF generado a partir del código fuente anterior se muestra a continuación.

[Figura 14](/static-assets/ironpdf-nodejs tutorials/html-to-pdf html-to-pdf-15.webp) El nuevo documento PDF creado a partir de sustituir los marcadores de posición definidos en una plantilla HTML con datos reales. Este documento retiene los estilos CSS y la disposición que esperaríamos si tales reemplazos nunca hubieran ocurrido.

Más información

Este tutorial solo ha arañado la superficie de lo que es posible con las funciones de API de alto nivel de IronPDF. Considera estudiar estos temas relacionados para ampliar tu conocimiento y comprensión.

  1. La clase PdfGenerator: se trata de una clase de utilidad dedicada a la creación de objetos PdfDocument a partir de HTML, URL, archivos Zip y otros medios de origen. Esta clase ofrece una alternativa viable al uso de las funciones de renderizado de PDF definidas en la clase PdfDocument.
  2. HttpLoginCredentials: si alguna vez necesitas generar PDF a partir de páginas web que requieren cookies específicas o que están protegidas por contraseña, esta referencia te resultará extremadamente útil.

Preguntas Frecuentes

¿Cómo puedo convertir HTML a PDF en Node.js sin perder el formato?

En Node.js, puedes usar IronPDF para convertir HTML a PDF sin perder el formato empleando métodos como PdfDocument.fromHtml, que admite la representación precisa de cadenas y archivos HTML en formato PDF.

¿Qué pasos se requieren para instalar IronPDF para Node.js?

Para instalar IronPDF en un proyecto Node.js, ejecuta el comando npm install @Iron Software/ironpdf. Esto añadirá el paquete de IronPDF a las dependencias de tu proyecto, permitiéndote usar sus capacidades de procesamiento de PDF.

¿Cómo puedo generar un PDF desde una URL web en Node.js?

Puedes usar el método PdfDocument.fromUrl en IronPDF para convertir una página web directamente a PDF proporcionando la URL de la página. Este método recupera el contenido y lo renderiza en formato PDF.

¿Cuáles son las opciones para personalizar la salida de PDF en IronPDF?

IronPDF proporciona la interfaz ChromePdfRenderOptions, que permite la personalización de la salida PDF. Puedes ajustar configuraciones como tamaño de página, orientación, márgenes e incluir contenido dinámico a través de esta interfaz.

¿Cómo puedo agregar encabezados y pies de página a mis documentos PDF usando IronPDF?

Para agregar encabezados y pies de página a PDFs en IronPDF, utiliza las propiedades textHeader y textFooter disponibles en ChromePdfRenderOptions. Esto permite la inclusión de texto personalizado en la parte superior e inferior de cada página.

¿Es posible convertir archivos HTML en un archivo zip a PDFs usando Node.js?

Sí, IronPDF admite la conversión de archivos HTML dentro de un archivo zip a PDFs utilizando el método PdfDocument.fromZip, permitiendo el procesamiento por lotes de múltiples archivos HTML.

¿Cómo puedo eliminar marcas de agua de PDFs generados con IronPDF?

Para eliminar marcas de agua de PDFs creados con IronPDF, debes aplicar una clave de licencia válida dentro de tu aplicación. Esto se puede hacer usando el método IronPdf.License.LicenseKey.

¿Cómo manejo contenido web asincrónico al convertir a PDF?

IronPDF proporciona el mecanismo WaitFor para gestionar contenido asincrónico, asegurando que todos los elementos dinámicos estén completamente cargados antes de que comience el proceso de renderizado de PDF.

¿Puede IronPDF convertir páginas web protegidas con contraseña a PDFs?

Sí, usando los HttpLoginCredentials dentro de las ChromePdfRenderOptions, puedes introducir las credenciales necesarias para acceder y convertir páginas web protegidas con contraseña a PDFs.

¿Qué debo hacer si mi conversión de HTML a PDF no mantiene el diseño correcto?

Asegúrate de estar utilizando las ChromePdfRenderOptions apropiadas para cumplir con los requisitos de diseño. Ajustar configuraciones como tamaño, orientación y márgenes de página puede ayudar a mantener el diseño deseado en el PDF convertido.

¿IronPDF admite totalmente la conversión de HTML a PDF en .NET 10?

Sí — IronPDF es compatible con .NET 10 para la conversión de HTML a PDF mediante clases como ChromePdfRenderer , incluyendo los métodos RenderHtmlAsPdf , RenderHtmlFileAsPdf y RenderUrlAsPdf , y es compatible con CSS3, JavaScript, imágenes y recursos externos. Esto se confirma explícitamente en la documentación de IronPDF sobre las características de la biblioteca PDF de .NET.

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: 2025.12 recién lanzado