Generación de informes PDF en JavaScript (Node.js): Resumen de bibliotecas y ejemplos de código

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 informes PDF en JavaScript (Node.js): Guía completa



La creación de documentos PDF es una de las tareas más demandadas en el desarrollo web. Ya sea para exportar facturas, generar informes analíticos o crear certificados, no se puede prescindir de una herramienta fiable. En el ecosistema de Node.js existen varias bibliotecas potentes que permiten resolver esta tarea de forma rápida y flexible. En este artículo, analizaremos tres enfoques principales y mostraremos cómo elegir la herramienta adecuada para su proyecto en PythonLib.



¿Por qué generar PDF en el servidor?

La generación del lado del cliente (navegador) suele ser limitada: el usuario puede perder datos al actualizar la página, y los dispositivos móviles no siempre procesan correctamente diseños complejos. El enfoque del lado del servidor con Node.js brinda control total sobre la estructura del documento, protege la lógica comercial y permite integrar la generación en los pipelines de CI/CD.



Top 3 bibliotecas para trabajar con PDF en Node.js



1. PDFKit — trabajo de bajo nivel con contenido

PDFKit es la biblioteca más popular para crear PDF desde cero. No requiere la instalación de dependencias adicionales (como Chromium) y permite controlar cada píxel del documento.

  • Ventajas: ligera (solo unos pocos megabytes), total libertad de maquetación, soporte para fuentes, imágenes y gráficos vectoriales.
  • Desventajas: se necesita escribir mucho código para diseños complejos, no tiene ajuste automático de texto.

Ejemplo de creación de una factura simple:

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

const doc = new PDFDocument({ margin: 50 });

doc.pipe(fs.createWriteStream('invoice.pdf'));

// Títulodoc.fontSize(25).text('Factura Nº123', { align: 'center' });doc.moveDown();

// Tabladoc.fontSize(12).text('Producto: Consultoría', { continued: true }) .text('Precio: 5000 RUB', { align: 'right' });

doc.moveDown();doc.text('Total: 5000 RUB', { align: 'right' });

doc.end();


2. Puppeteer — generación desde HTML/CSS

Puppeteer ejecuta un navegador headless Chromium y convierte una página HTML en PDF. Es la opción ideal si ya tiene plantillas en HTML con estilos CSS.

  • Ventajas: maquetación sencilla mediante HTML, soporte de todas las propiedades CSS (flex, grid, @media print), posibilidad de añadir encabezados y pies de página.
  • Desventajas: dependencia pesada (~300 MB de Chromium), inicio lento, no es adecuado para documentos simples.

Ejemplo de conversión de HTML a PDF:

const puppeteer = require('puppeteer');

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

await page.setContent(`<h1 style="color: blue;">Informe de marzo 2025</h1> <p>Ingresos totales: <strong>1 200 000 RUB</strong></p>`);

await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true, margin: { top: '20px', bottom: '20px' } });

await browser.close();}

generateReport();


3. jsPDF — herramienta universal (cliente + servidor)

jsPDF es una biblioteca que funciona tanto en el navegador como en Node.js. Proporciona métodos de alto nivel para crear tablas, gráficos e incluso incrustar fuentes.

  • Ventajas: API simple, soporte integrado para tablas (a través de un plugin), peso reducido.
  • Desventajas: en el servidor requiere configuración manual de fuentes (no todos los caracteres cirílicos están disponibles por defecto).

Ejemplo con tabla:

const { jsPDF } = require("jspdf");require("jspdf-autotable");

const doc = new jsPDF();

doc.text("Estadísticas de ventas", 14, 20);

doc.autoTable({ head: [['Mes', 'Ventas', 'Ganancias']], body: [ ['Enero', '100', '20 000'],

Recommendations