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

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): guía completa de bibliotecas y herramientas



La generación de documentos PDF es una de las tareas más demandadas en el desarrollo web. Desde la creación de facturas e informes hasta la elaboración de documentos complejos de varias páginas, Node.js ofrece potentes herramientas para trabajar con PDF. En este artículo, exploraremos las principales bibliotecas y enfoques para crear archivos PDF en el lado del servidor con JavaScript.



¿Por qué generar PDF en el servidor?

La generación de PDF en el servidor permite:

  • Crear documentos dinámicamente basados en datos de la base de datos
  • Garantizar la consistencia del formato
  • Trabajar con grandes volúmenes de datos sin sobrecargar el cliente
  • Integrarse con sistemas de informes existentes


Principales bibliotecas para generar PDF en Node.js



1. pdfkit — solución clásica

pdfkit es una de las bibliotecas más populares para crear PDF desde cero. Proporciona control total sobre el contenido del documento: texto, imágenes, tablas, gráficos vectoriales.



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

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

// Añadimos textodoc.fontSize(25).text('¡Hola, mundo!', 100, 100);

// Dibujamos una líneadoc.moveTo(100, 150).lineTo(400, 150).stroke();

// Insertamos una imagendoc.image('logo.png', 100, 200, { width: 100 });

doc.end();


Ventajas: ligero, rápido, compatible con Unicode y cirílico, múltiples fuentes.

Desventajas: requiere configuración manual del diseño, no tiene soporte integrado para HTML.



2. Puppeteer — generación desde HTML

Puppeteer es una biblioteca para controlar el navegador Chrome sin interfaz gráfica (headless). Permite convertir páginas HTML a PDF conservando todos los estilos y scripts.



const puppeteer = require('puppeteer');

async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setContent('<h1 style="color: red;">Título del PDF</h1><p>Texto del documento</p>'); await page.pdf({ path: 'output.pdf', format: 'A4', margin: { top: '20px', bottom: '20px' } }); await browser.close();}

generatePDF();


Ventajas: ideal para diseños HTML complejos, compatible con CSS, JavaScript y fuentes.

Desventajas: pesado (requiere Chromium), más lento que otras bibliotecas.



3. pdf-lib — modificación de PDF existentes

pdf-lib se especializa en la edición de documentos PDF existentes. Permite añadir texto, imágenes y rellenar formularios.



const { PDFDocument } = require('pdf-lib');const fs = require('fs');

async function editPDF() { const existingPdfBytes = fs.readFileSync('template.pdf'); const pdfDoc = await PDFDocument.load(existingPdfBytes); const pages = pdfDoc.getPages(); const firstPage = pages[0]; firstPage.drawText('Texto nuevo', { x: 50, y: 50, size: 20, color: rgb(0, 0, 0) }); const pdfBytes = await pdfDoc.save(); fs.writeFileSync('modified.pdf', pdfBytes);}

editPDF();


Ventajas: ligero, no requiere dependencias externas, funciona muy bien con formularios.

Desventajas: capacidades limitadas para crear diseños complejos desde cero.



4. jsPDF — solución cliente-servidor

jsPDF fue creada originalmente para el navegador, pero también funciona en Node.js. Es adecuada para documentos simples.



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

const doc = new jsPDF();doc.text("Hello world!", 10, 10);doc.save("output.pdf");


Ventajas: API simple, funciona en cliente y servidor.

Desventajas:

Recommendations