Geração de relatórios PDF em JavaScript (Node.js)
Criar documentos PDF é uma das tarefas mais requisitadas no desenvolvimento web. Relatórios, faturas, certificados, documentação — tudo isso exige uma ferramenta confiável para geração no lado do servidor. No ecossistema Node.js, existem várias bibliotecas poderosas que permitem criar arquivos PDF de forma flexível. Neste artigo, vamos detalhar três abordagens principais: PDFKit (programação direta), Puppeteer (renderização de HTML) e jsPDF (opção leve).
Por que gerar PDF no servidor?
- Conteúdo dinâmico — dados do banco, cálculos, gráficos.
- Segurança — controle de acesso e versionamento.
- Automação — envio em massa de relatórios agendados.
- Formato único — exibição correta em todos os dispositivos.
1. PDFKit — controle total sobre o documento
PDFKit é a biblioteca mais popular para criar PDF "do zero". Ela não requer navegador e funciona exclusivamente com objetos JavaScript. Você controla cada elemento: texto, imagens, gráficos vetoriais, fontes.
Instalação
npm install pdfkitExemplo: relatório simples com tabela
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('report.pdf'));
// Títulodoc.fontSize(24).text('Relatório Mensal', { align: 'center' });doc.moveDown();
// Subtítulodoc.fontSize(14).text('Período: Janeiro 2025', { align: 'center' });doc.moveDown(2);
// Tabela (simulação)doc.fontSize(12).font('Helvetica-Bold');doc.text('Produto', 50, 150);doc.text('Quantidade', 250, 150);doc.text('Preço', 400, 150);
doc.font('Helvetica');const data = [ { item: 'Notebooks', qty: 15, price: 75000 }, { item: 'Monitores', qty: 30, price: 25000 }, { item: 'Teclados', qty: 100, price: 1500 }];
let y = 170;data.forEach(row => { doc.text(row.item, 50, y); doc.text(String(row.qty), 250, y); doc.text(String(row.price), 400, y); y += 20;});
// Totaldoc.moveDown();doc.font('Helvetica-Bold');doc.text(`Total: ${data.reduce((sum, r) => sum + r.qty * r.price, 0)} RUB`, 50, y + 20);
doc.end();Recursos do PDFKit:
- Gráficos vetoriais (linhas, retângulos, círculos).
- Incorporação de fontes (TrueType, OpenType).
- Suporte a Unicode e cirílico.
- Criação de links e anotações.
2. Puppeteer — renderização de HTML em PDF
Se você já tem um template HTML de relatório (por exemplo, com Bootstrap), Puppeteer é a escolha ideal. Ele executa um navegador Chrome headless e converte a página em PDF, mantendo todos os estilos, fontes e animações JavaScript.
Instalação
npm install puppeteerExemplo: conversão de template HTML
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();
// HTML com CSS const html = ` <!DOCTYPE html> <html> <head> <style> body { font-family: Arial; padding: 40px; } h1 { color: #2c3e50; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ccc; padding: 8px; } </style> </head> <body> <h1>Relatório de Vendas</h1> <table> <tr><th>Mês</th><th>Valor</th></tr> <tr><td>Janeiro</td><td>450 000 RUB</td> Também na biblioteca
Frameworks CLI para PHP: Symfony Console e Laravel Zero — guia completo
Testcontainers .NET para C# (.NET): guia completo com exemplos
TypeBox para TypeScript: guia completo com exemplos práticos
InversifyJS: Contêiner IoC para aplicações TypeScript