HERRAMIENTAS PDF

Cómo convertir HTML a PDF en Node.js usando Puppeteer

En el mundo digital de hoy en día, es crucial tener la capacidad de convertir páginas web o documentos HTML en archivos PDF. Esto puede ser útil para generar informes, crear facturas o simplemente compartir información en un formato más presentable. En esta entrada del blog, exploraremos cómo convertir páginas HTML a PDF utilizando Node.js y Puppeteer, una biblioteca de código abierto desarrollada por Google.

Introducción a Puppeteer

Puppeteer es una potente librería Node.js que permite a los desarrolladores controlar navegadores headless, principalmente Google Chrome o Chromium, y realizar diversas acciones como web scraping, tomar capturas de pantalla y generar PDFs. Puppeteer proporciona una amplia API para interactuar con el navegador, lo que lo convierte en una excelente opción para convertir HTML a PDF.

¿Por qué Titiritero?

  • Facilidad de uso: Puppeteer ofrece una API simple y fácil de usar que abstrae las complejidades de trabajar con navegadores sin cabeza.
  • Poderoso: Puppeteer ofrece capacidades extensivas para manipular páginas web e interactuar con elementos del navegador.
  • Escalable: Con Puppeteer, puedes escalar fácilmente tu proceso de generación de PDF ejecutando múltiples instancias del navegador en paralelo.

Configuración del proyecto NodeJS

Antes de empezar, necesitarás configurar un nuevo proyecto NodeJS. Sigue estos pasos para empezar:

  1. Instale NodeJS si aún no lo ha hecho (puede descargarlo desde el sitio web de NodeJS).

  2. Cree una nueva carpeta para su proyecto y ábrala en Visual Studio Code o en cualquier editor de código específico.

  3. Ejecuta npm init para crear un nuevo archivo package.json para tu proyecto. Siga las instrucciones y rellene la información solicitada.

    Cómo convertir HTML a PDF en Node.js: Figura 1

  4. Instala Puppeteer ejecutando npm install puppeteer.

    Cómo convertir HTML a PDF en Node.js: Figura 2

    Ahora que tenemos nuestro proyecto configurado, vamos a sumergirnos en el código.

Carga de plantilla HTML y conversión a archivo PDF

Para convertir plantillas HTML a un archivo PDF utilizando Puppeteer, siga estos pasos:

Cree un archivo llamado "HTML To PDF.js" en la carpeta.

Importar Puppeteer y fs

    const puppeteer = require('puppeteer');
    const fs = require('fs');
    const puppeteer = require('puppeteer');
    const fs = require('fs');
NODE.JS

El código comienza importando dos bibliotecas esenciales: puppeteer, una herramienta versátil para controlar navegadores sin cabeza como Chrome y Chromium, y fs, un módulo incorporado de NodeJS para manejar operaciones del sistema de archivos. Puppeteer le permite automatizar una amplia gama de tareas basadas en la web, como renderizar HTML, capturar pantallas y generar archivos PDF.

Definición de la función exportWebsiteAsPdf

    async function exportWebsiteAsPdf(html, outputPath) {
      // Create a browser instance
      const browser = await puppeteer.launch({
        headless: 'new'
      });

      // Create a new page
      const page = await browser.newPage();

      await page.setContent(html, { waitUntil: 'domcontentloaded' });

      // To reflect CSS used for screens instead of print
      await page.emulateMediaType('screen');

      // Download the PDF
      const PDF = await page.pdf({
        path: outputPath,
        margin: { top: '100px', right: '50px', bottom: '100px', left: '50px' },
        printBackground: true,
        format: 'A4',
      });

      // Close the browser instance
      await browser.close();

      return PDF;
    }
    async function exportWebsiteAsPdf(html, outputPath) {
      // Create a browser instance
      const browser = await puppeteer.launch({
        headless: 'new'
      });

      // Create a new page
      const page = await browser.newPage();

      await page.setContent(html, { waitUntil: 'domcontentloaded' });

      // To reflect CSS used for screens instead of print
      await page.emulateMediaType('screen');

      // Download the PDF
      const PDF = await page.pdf({
        path: outputPath,
        margin: { top: '100px', right: '50px', bottom: '100px', left: '50px' },
        printBackground: true,
        format: 'A4',
      });

      // Close the browser instance
      await browser.close();

      return PDF;
    }
NODE.JS

La función exportWebsiteAsPdf sirve como el núcleo de nuestro fragmento de código. Esta función asincrónica acepta una cadena de html y una outputPath como parámetros de entrada y devuelve un archivo PDF. La función realiza los siguientes pasos:

  1. Lanza una nueva instancia de navegador headless usando Puppeteer.

  2. Crea una nueva página del navegador.

  3. Establece la cadena de html proporcionada como el contenido de la página, esperando a que se cargue el contenido del DOM. Cargamos plantillas de html como una cadena HTML para convertirlas al formato PDF.

  4. Emula el tipo de medio 'screen' para aplicar el CSS utilizado para pantallas en lugar de estilos específicos de impresión.

  5. Genera un archivo PDF a partir del contenido HTML cargado, especificando márgenes, impresión de fondo y formato (A4).

  6. Cierra la instancia del navegador.

  7. Devuelve el archivo PDF creado.

Uso de la función exportWebsiteAsPdf


    // Usage example
    // Get HTML content from HTML file
    const html = fs.readFileSync('test.html', 'utf-8');

    exportWebsiteAsPdf(html, 'result.PDF').then(() => {
      console.log('PDF created successfully.');
    }).catch((error) => {
      console.error('Error creating PDF:', error);
    });

    // Usage example
    // Get HTML content from HTML file
    const html = fs.readFileSync('test.html', 'utf-8');

    exportWebsiteAsPdf(html, 'result.PDF').then(() => {
      console.log('PDF created successfully.');
    }).catch((error) => {
      console.error('Error creating PDF:', error);
    });
NODE.JS

La última sección del código ilustra cómo usar la función exportWebsiteAsPdf. Realizamos los siguientes pasos:

  1. Lee el contenido HTML de un archivo HTML usando el método readFileSync del módulo fs. Aquí estamos cargando archivos de plantilla para generar PDF a partir de páginas HTML.

  2. Llama a la función exportWebsiteAsPdf con la cadena html cargada y la outputPath deseada.

  3. Utilice un bloque .then para manejar la creación exitosa del PDF, registrando un mensaje de éxito en la consola.

  4. Emplea un bloque .catch para gestionar cualquier error que ocurra durante el proceso de conversión de HTML a PDF, registrando un mensaje de error en la consola.

    Este fragmento de código proporciona un ejemplo completo de cómo convertir una plantilla HTML en un archivo PDF utilizando NodeJS y Puppeteer. Implementando esta solución, podrá generar PDF de alta calidad de forma eficaz, satisfaciendo las necesidades de diversas aplicaciones y usuarios.

    Cómo convertir HTML a PDF en Node.js: Figura 3

Convertir URL en archivos PDF

Además de convertir plantillas HTML, Puppeteer también permite convertir URL directamente en archivos PDF.

Importar Puppeteer


    const puppeteer = require('puppeteer');

    const puppeteer = require('puppeteer');
NODE.JS

El código comienza importando la librería Puppeteer, que es una potente herramienta para controlar navegadores headless como Chrome y Chromium. Puppeteer le permite automatizar una serie de tareas basadas en la web, incluida la representación de su código HTML, la captura de pantallas y, en nuestro caso, la generación de archivos PDF.

Definición de la función exportWebsiteAsPdf


    async function exportWebsiteAsPdf(websiteUrl, outputPath) {
      // Create a browser instance
      const browser = await puppeteer.launch({
        headless: 'new'
      });

      // Create a new page
      const page = await browser.newPage();

      // Open URL in current page
      await page.goto(websiteUrl, { waitUntil: 'networkidle0' });

      // To reflect CSS used for screens instead of print
      await page.emulateMediaType('screen');

      // Download the PDF
      const PDF = await page.pdf({
        path: outputPath,
        margin: { top: '100px', right: '50px', bottom: '100px', left: '50px' },
        printBackground: true,
        format: 'A4',
      });

      // Close the browser instance
      await browser.close();

      return PDF;
    }

    async function exportWebsiteAsPdf(websiteUrl, outputPath) {
      // Create a browser instance
      const browser = await puppeteer.launch({
        headless: 'new'
      });

      // Create a new page
      const page = await browser.newPage();

      // Open URL in current page
      await page.goto(websiteUrl, { waitUntil: 'networkidle0' });

      // To reflect CSS used for screens instead of print
      await page.emulateMediaType('screen');

      // Download the PDF
      const PDF = await page.pdf({
        path: outputPath,
        margin: { top: '100px', right: '50px', bottom: '100px', left: '50px' },
        printBackground: true,
        format: 'A4',
      });

      // Close the browser instance
      await browser.close();

      return PDF;
    }
NODE.JS

La función exportWebsiteAsPdf es el núcleo de nuestro fragmento de código. Esta función asíncrona acepta un websiteUrl y un outputPath como sus parámetros de entrada y devuelve un archivo PDF. La función realiza los siguientes pasos:

  1. Lanza una nueva instancia de navegador headless usando Puppeteer.

  2. Crea una nueva página del navegador.

  3. Navega al websiteUrl proporcionado y espera a que la red quede inactiva usando la opción waitUntil establecida en networkidle0.

  4. Emula el tipo de medio "pantalla" para garantizar que se aplica el CSS utilizado para pantallas en lugar de estilos específicos de impresión.

  5. Convierte la página web cargada a un archivo PDF con los márgenes especificados, impresión de fondo y formato (A4).

  6. Cierra la instancia del navegador.

  7. Devuelve el archivo PDF generado.

Uso de la función exportWebsiteAsPdf


    // Usage example
    exportWebsiteAsPdf('https://ironpdf.com/', 'result.pdf').then(() => {
      console.log('PDF created successfully.');
    }).catch((error) => {
      console.error('Error creating PDF:', error);
    });

    // Usage example
    exportWebsiteAsPdf('https://ironpdf.com/', 'result.pdf').then(() => {
      console.log('PDF created successfully.');
    }).catch((error) => {
      console.error('Error creating PDF:', error);
    });
NODE.JS

La sección final del código demuestra cómo utilizar la función exportWebsiteAsPdf. Ejecutamos los siguientes pasos:

  1. Llama a la función exportWebsiteAsPdf con el websiteUrl y outputPath deseados.

  2. Utilice un bloque then para manejar la creación exitosa del PDF. En este bloque, registramos un mensaje de éxito en la consola.

  3. Utilice un bloque catch para manejar cualquier error que ocurra durante el proceso de conversión de sitio web a PDF. Si se produce un error, registramos un mensaje de error en la consola.

    Integrando este fragmento de código en tus proyectos, podrás convertir sin esfuerzo URLs en archivos PDF de alta calidad utilizando NodeJS y Puppeteer.

    Cómo Convertir HTML a PDF en Node.js: Figura 4

La mejor biblioteca de HTML a PDF para desarrolladores de C

Explore IronPDF es una popular biblioteca .NET utilizada para generar, editar y extraer contenido de archivos PDF. Proporciona una solución sencilla y eficaz para crear PDF a partir de HTML, texto, imágenes y documentos PDF existentes. IronPDF es compatible con proyectos .NET Core, .NET Framework y .NET 5.0+, lo que lo convierte en una opción versátil para diversas aplicaciones.

Características principales de IronPDF

Conversión de HTML a PDF con IronPDF: IronPDF te permite convertir contenido HTML, incluyendo CSS, a archivos PDF. Esta función le permite crear documentos PDF perfectos a partir de páginas web o plantillas HTML.

Renderizado de URL: IronPDF puede obtener páginas web directamente de un servidor utilizando una URL y convertirlas en archivos PDF, facilitando el archivo de contenido web o la generación de informes a partir de páginas web dinámicas.

Combinación de Texto, Imagen y PDF: IronPDF permite combinar texto, imágenes y archivos PDF existentes en un solo documento PDF. Esta función es especialmente útil para crear documentos complejos con múltiples fuentes de contenido.

Manipulación de PDF: IronPDF ofrece herramientas para editar archivos PDF existentes, como agregar o eliminar páginas, modificar metadatos o incluso extraer texto e imágenes de documentos PDF.

Conclusión

En conclusión, la generación y manipulación de archivos PDF es un requisito común en muchas aplicaciones, y disponer de las herramientas adecuadas es crucial. Las soluciones proporcionadas en este artículo, como el uso de Puppeteer con NodeJS o IronPDF con .NET, ofrecen métodos potentes y eficaces para convertir contenido HTML y URL en documentos PDF profesionales y de alta calidad.

IronPDF, en particular, destaca por su amplio conjunto de funciones, que lo convierten en la mejor opción para los desarrolladores .NET. IronPDF ofrece una prueba gratuita que te permite explorar sus capacidades.

Los usuarios también pueden beneficiarse del paquete Iron Suite, un conjunto de cinco bibliotecas .NET profesionales que incluyen IronXL, IronPDF, IronOCR y más.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Cómo convertir HTML a PDF en C++
SIGUIENTE >
Editor PDF de código abierto (lista actualizada)