Generación de PDF en JavaScript (Node.js): bibliotecas y herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generación de PDF en JavaScript (Node.js): bibliotecas y herramientas



La generación de documentos PDF es una de las tareas frecuentes en el desarrollo web. Facturas, informes, certificados, billetes: todo esto es conveniente crearlo en el lado del servidor. En el ecosistema de Node.js existen varias soluciones maduras, cada una adecuada para escenarios específicos. En este artículo, revisaremos tres enfoques principales y bibliotecas populares para crear PDF en JavaScript.



Resumen de bibliotecas populares



La elección de la herramienta depende de la complejidad del documento: informes de texto simples, tablas con datos o diseños complejos con HTML+CSS. A continuación se presentan tres bibliotecas clave.



1. PDFKit — trabajo de bajo nivel con PDF



PDFKit es la biblioteca más popular para crear PDF «desde cero». Permite dibujar texto, líneas, rectángulos, imágenes utilizando una cuadrícula de coordenadas. Es ideal para documentos dinámicos con posicionamiento preciso.



Ventajas de PDFKit:

  • Control total sobre cada elemento de la página
  • No requiere navegador ni Puppeteer
  • Soporte para incrustar fuentes (TrueType, OpenType)
  • Funciona de forma asíncrona con flujos (Stream API)


Ejemplo de un documento simple:



const PDFDocument = require('pdfkit');const fs = require('fs');

const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));

// Títulodoc.fontSize(25).text('¡Hola, PDFKit!', 100, 100);

// Texto normaldoc.fontSize(12).text('Este es un documento PDF simple creado en Node.js.', 100, 150);

// Dibujamos una líneadoc.moveTo(100, 200).lineTo(500, 200).stroke();

// Añadimos una imagendoc.image('logo.png', 100, 220, { width: 100 });

doc.end();


2. Puppeteer — generación desde HTML/CSS



Puppeteer es una biblioteca para controlar el navegador Chrome sin interfaz gráfica (headless). Permite cargar una página HTML (o generarla sobre la marcha) y guardarla como PDF. Es la mejor opción si ya tienes plantillas HTML o estilos CSS complejos.



Ventajas de Puppeteer:

  • Representación precisa de CSS (flex, grid, fuentes)
  • Soporte de JavaScript en la página (gráficos, tablas)
  • Posibilidad de definir formato, márgenes, encabezados y pies de página
  • Ideal para informes y facturas


Ejemplo de generación de PDF desde HTML:



const puppeteer = require('puppeteer');

(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage();

const html = `<!DOCTYPE html> <html> <head><style> body { font-family: Arial; padding: 20px; } h1 { color: #2c3e50; } table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 8px; } </style></head> <body> <h1>Informe mensual</h1> <table> <tr><th>Producto</th><th>Cantidad</th></tr> <tr><td>Portátil</td><td>5</td></tr> <tr><td>Ratón</td><td>10</td></tr> </table> </body></html>`;

await page.setContent(html); await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true });

await browser.close(); console.log('¡PDF creado!');})();


3. jsPDF — generación en el cliente (y Node.js)



jsPDF fue creado originalmente para el navegador, pero tiene una versión para Node.js. Es ligero y muy adecuado para documentos simples. En Node.js se utiliza a través del paquete jspdf con dependencias adicionales.



Ventajas de jsPDF:

  • Tamaño pequeño
  • Soporte para Unicode y cirílico (mediante carga de fuentes)
  • Puede funcionar tanto en el cliente como en

Recommendations