¿Qué es pdf-lib y para qué sirve?
pdf-lib es una potente y ligera biblioteca para crear y editar documentos PDF en JavaScript (Node.js y navegador). A diferencia de soluciones pesadas como Puppeteer o jsPDF, pdf-lib no requiere instalar un entorno de navegador (Chromium) y trabaja exclusivamente con estructuras PDF nativas. Es ideal para la generación en servidor de informes, facturas, certificados y cualquier otro documento donde se necesite control total sobre el contenido: texto, fuentes (incluyendo incrustación), imágenes, formularios, anotaciones y páginas.
Instalación
La instalación a través de npm es sencilla:
npm install pdf-libLuego impórtelo en su proyecto:
const { PDFDocument, rgb, StandardFonts } = require('pdf-lib');Funciones principales
- Crear PDF desde cero — añadir páginas, texto, imágenes.
- Editar PDF existentes — copiar páginas, insertar texto superpuesto, combinar documentos.
- Trabajar con fuentes — soporte para fuentes estándar (Helvetica, TimesRoman) e incrustación de fuentes TTF personalizadas.
- Dibujar formas — líneas, rectángulos, elipses con configuración de color y transparencia.
- Formularios y anotaciones — creación de campos de texto, botones, enlaces.
- Exportar a Uint8Array — el resultado se puede guardar en un archivo o enviar al cliente.
Ejemplo de código en Node.js
Crearemos un PDF simple con un título y una imagen:
const { PDFDocument, rgb } = require('pdf-lib');const fs = require('fs');
async function createPDF() { const doc = await PDFDocument.create(); const page = doc.addPage([600, 400]); // Texto page.drawText('¡Hola, mundo!', { x: 50, y: 350, size: 30, color: rgb(0, 0.53, 0.71), }); // Rectángulo page.drawRectangle({ x: 50, y: 200, width: 200, height: 100, color: rgb(0.9, 0.1, 0.1), borderColor: rgb(0, 0, 0), borderWidth: 2, }); // Incrustación de imagen (PNG) const imageBytes = fs.readFileSync('logo.png'); const image = await doc.embedPng(imageBytes); page.drawImage(image, { x: 300, y: 250, width: 100, height: 100, }); const pdfBytes = await doc.save(); fs.writeFileSync('output.pdf', pdfBytes);}
createPDF().catch(console.error);¿Cuándo usar pdf-lib?
pdf-lib es la mejor opción si trabajas en un entorno Node.js (o navegador) y necesitas:
- Generar PDF rápidamente sin iniciar un navegador (ahorro de memoria y tiempo).
- Incrustar fuentes personalizadas (por ejemplo, para cirílico).
- Editar PDF ya existentes (añadir marcas de agua, combinar documentos).
- Crear formularios interactivos.
Evita pdf-lib si necesitas renderizar HTML/CSS complejo a PDF (para eso es mejor Puppeteer) o trabajar con grandes volúmenes de datos (los PDF pesados pueden ralentizar el trabajo).
También en la biblioteca
GuzzleHTTP/Promises PHP: guía completa con ejemplos prácticos
Colas de tareas en Kotlin: Coroutines, Flow y bibliotecas para procesamiento en segundo plano
Registro para JavaScript (Node.js): las mejores soluciones