Generación de informes PDF en TypeScript: resumen de bibliotecas y ejemplos prácticos
La generación de documentos PDF es una de las tareas clave en el desarrollo de aplicaciones web modernas y sistemas empresariales. Informes, facturas, certificados, paneles analíticos: todo esto requiere una herramienta conveniente y flexible para crear PDF en el lado del servidor o del cliente. TypeScript, como superconjunto estrictamente tipado de JavaScript, ofrece excelentes oportunidades para implementar dicha funcionalidad. En este artículo, revisaremos las principales bibliotecas para generar PDF en TypeScript, sus características, ventajas y ejemplos de uso.
¿Por qué usar TypeScript para generar PDF?
TypeScript añade tipado estático, lo que simplifica enormemente el desarrollo de sistemas complejos de generación de informes. El IDE proporciona autocompletado, verificación de tipos y refactorización, lo que reduce la cantidad de errores. Además, el código TypeScript es fácil de mantener y escalar, especialmente en proyectos grandes.
Principales bibliotecas para generar PDF en TypeScript
Consideremos las tres herramientas más populares: PDFKit, jsPDF y Puppeteer. Cada una tiene su nicho y características particulares.
1. PDFKit
PDFKit es una potente biblioteca para crear documentos PDF en Node.js. Está completamente escrita en JavaScript y es compatible con TypeScript a través de definiciones de tipos (@types/pdfkit). PDFKit permite crear documentos desde cero, añadir texto, imágenes, gráficos vectoriales, tablas y mucho más.
Ventajas:
- Control total sobre el contenido y la estructura del PDF.
- Soporte para fuentes, colores, transparencia.
- Soporte integrado para cirílico (al cargar fuentes).
- Alto rendimiento.
Ejemplo de uso de PDFKit con TypeScript:
import PDFDocument from 'pdfkit';import * as fs from 'fs';
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('report.pdf'));
doc.fontSize(25).text('Informe de ventas', 100, 100);doc.fontSize(12).text('Fecha: 2025-03-15', 100, 150);doc.moveDown();
doc.text('Nombre: Portátil');doc.text('Cantidad: 10');doc.text('Importe: 1 200 000 RUB');
doc.end();Para trabajar correctamente con cirílico, es necesario cargar una fuente, por ejemplo:
doc.registerFont('Roboto', 'fonts/Roboto-Regular.ttf');doc.font('Roboto').text('¡Hola, mundo!');2. jsPDF
jsPDF es una biblioteca del lado del cliente para generar PDF directamente en el navegador. También tiene tipos para TypeScript. jsPDF es ideal para crear informes simples, facturas y albaranes sin procesamiento en el servidor.
Ventajas:
- Funciona del lado del cliente (no necesita servidor).
- Configuración y uso sencillos.
- Soporte para maquetación HTML mediante el plugin
html2canvas.
Ejemplo de uso de jsPDF con TypeScript:
import { jsPDF } from 'jspdf';
const doc = new jsPDF();doc.setFontSize(18);doc.text('Informe del proyecto', 10, 20);doc.setFontSize(12);doc.text('Completado: 75%', 10, 40);doc.text('Presupuesto: 2 500 000 RUB', 10, 50);
doc.save('project-report.pdf');Importante: jsPDF no admite cirílico "de fábrica". Para trabajar con texto en ruso, es necesario cargar fuentes mediante addFileToVFS y addFont.
3. Puppeteer
Puppeteer es una biblioteca para controlar el navegador Chrome/Chromium a través del protocolo DevTools. Permite generar PDF a partir de HTML/CSS con la máxima precisión, ya que utiliza el renderizado real del navegador. Puppeteer tiene tipos oficiales de TypeScript.
Ventajas:
- Soporte completo de CSS, Flexbox, Grid, cirílico.
También en la biblioteca
Swift Data para Swift: guía completa con ejemplos
Trabajo con S3 y almacenamiento en la nube en Java: AWS SDK y MinIO
Internacionalización (i18n) en TypeScript: guía completa
Moment.js / Day.js para JavaScript (Node.js): guía completa con ejemplos
Generación de PDF en C++: resumen de bibliotecas y ejemplos de código