Generación de PDF en JavaScript: biblioteca pdf-lib

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
```html

¿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-lib

Luego 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).

```

Recommendations