Generación de PDF en JavaScript (Node.js): revisión de bibliotecas y herramientas
La creación de documentos PDF es una de las tareas comunes en el desarrollo web. Ya sea para generar facturas, informes, certificados o simplemente exportar datos, Node.js ofrece varias soluciones potentes. En este artículo, revisaremos las principales bibliotecas para trabajar con PDF en el lado del servidor de JavaScript, sus capacidades y ejemplos de uso.
¿Por qué generar PDF en el servidor?
La generación de PDF en el servidor (en Node.js) ofrece varias ventajas:
- Uniformidad — el documento se ve igual en todos los dispositivos
- Seguridad — los datos no salen del servidor
- Automatización — se pueden crear PDF según un horario o ante eventos específicos
- Soporte de lógica compleja — acceso a bases de datos, sistema de archivos y otros recursos
Bibliotecas principales para generar PDF en Node.js
1. PDFKit
PDFKit es la biblioteca más popular para crear PDF "desde cero". No requiere dependencias externas y permite controlar completamente el contenido del documento.
Ejemplo de uso:
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Agregamos contenidodoc.fontSize(25).text('¡Hola, mundo!', 100, 100);doc.fontSize(12).text('Este es un PDF creado con PDFKit.', 100, 150);
// Dibujamos una líneadoc.moveTo(100, 200).lineTo(500, 200).stroke();
// Finalizamos el documentodoc.end();Capacidades:
- Agregar texto con diferentes fuentes y tamaños
- Insertar imágenes (JPEG, PNG)
- Dibujar líneas, rectángulos y círculos
- Soporte de enlaces y marcadores
- Creación de documentos de varias páginas
2. Puppeteer
Puppeteer es una herramienta para controlar el navegador Chrome/Chromium. Permite generar PDF a partir de páginas HTML, lo cual es útil para diseños complejos.
Ejemplo de uso:
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();
await page.setContent('<h1>Título</h1><p>Texto del documento</p>'); await page.pdf({ path: 'page.pdf', format: 'A4' });
await browser.close();}
generatePDF();Características:
- Soporte de CSS, JavaScript y todas las tecnologías web modernas
- Ideal para convertir plantillas HTML a PDF
- Posibilidad de imprimir con parámetros definidos (formato, márgenes, escala)
- Requiere la instalación de Chromium (~300 MB)
3. jsPDF (con adaptación para Node.js)
jsPDF es una biblioteca del lado del cliente, pero existen envoltorios para usarla en Node.js (por ejemplo, jspdf-autotable).
Ejemplo (usando jspdf y html2canvas):
const { jsPDF } = require('jspdf');const fs = require('fs');
const doc = new jsPDF();doc.text('¡Hola desde Node.js!', 10, 10);doc.save('output.pdf');Limitaciones: jsPDF no soporta diseños complejos y requiere bibliotecas adicionales para trabajar con HTML.
4. pdfmake
pdfmake es una biblioteca basada en la descripción declarativa del documento en formato JSON.
Ejemplo:
const pdfmake = require('pdfmake');const fs = require('fs');
const fonts = { Roboto: { normal: 'fonts/Roboto-Regular.ttf', bold: 'fonts/Roboto-Medium.ttf' }};
const printer = new pdfmake(fonts);
const docDefinition = { content: [ { text: También en la biblioteca
Biblioteca GraphQL para TypeScript: guía completa de herramientas
Frameworks CLI para Java: visión general y comparación de las mejores herramientas
Análisis de HTML en PHP: Guía completa de bibliotecas y herramientas
Effect-ts para TypeScript: guía completa con ejemplos