Geração de relatórios PDF em JavaScript (Node.js): Puppeteer, PDFKit, jsPDF

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geração de relatórios PDF em JavaScript (Node.js): Puppeteer, PDFKit, jsPDF



Criar documentos PDF é uma das tarefas mais comuns no desenvolvimento web. Relatórios, faturas, certificados, documentação — tudo isso requer uma ferramenta confiável para gerar arquivos no lado do servidor. No ecossistema Node.js, existem várias bibliotecas poderosas, cada uma resolvendo a tarefa de sua própria maneira. Neste artigo, vamos analisar três abordagens principais: emulação de navegador via Puppeteer, trabalho de baixo nível com PDF via PDFKit e a solução cliente-servidor jsPDF.



1. Puppeteer — geração de PDF a partir de HTML/CSS



Puppeteer é uma biblioteca para controlar o navegador headless Chromium. Ela permite carregar qualquer página HTML, aplicar estilos e "fotografá-la" em PDF. Esta é a escolha ideal se você já tem a estrutura dos relatórios em HTML/CSS e deseja uma transferência precisa para o PDF.



Principais recursos:

  • Suporte a todas as propriedades CSS (Flexbox, Grid, fontes, sombras).
  • Trabalho com JavaScript na página (gráficos Chart.js, tabelas dinâmicas).
  • Configuração de formato, margens, cabeçalhos/rodapés, fundos.
  • Suporte a fontes personalizadas (TTF, OTF).


Exemplo de geração de relatório:



const puppeteer = require('puppeteer');

async function generateReport() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// Carregamos o HTML diretamente (ou por URL) await page.setContent(` <html> <head> <style> body { font-family: Arial; padding: 40px; } h1 { color: #2c3e50; } .data { background: #ecf0f1; padding: 20px; } </style> </head> <body> <h1>Relatório de Vendas</h1> <div class="data"> <p>Receita: 1 200 000 руб.</p> <p>Número de pedidos: 345</p> </div> </body> </html> `, { waitUntil: 'networkidle0' });

await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true, margin: { top: '20mm', bottom: '20mm' } });

await browser.close(); console.log('PDF criado!');}

generateReport();


Vantagens: precisão da estrutura, suporte a layouts complexos, trabalho com gráficos.

Desvantagens: alto consumo de memória (Chromium pesa ~200 MB), inicialização lenta.



2. PDFKit — criação de PDF de baixo nível



PDFKit é uma biblioteca para manipulação direta da estrutura do PDF. Você não usa HTML, mas constrói o documento programaticamente: desenha linhas, adiciona texto, insere imagens. Isso dá controle total sobre cada pixel do documento.



Principais recursos:

  • Gráficos vetoriais (linhas, retângulos, curvas).
  • Suporte a Unicode e incorporação de fontes.
  • Criação de tabelas, numeração de páginas.
  • Trabalho com anotações e links.


Exemplo de criação de uma fatura simples:



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

const doc = new PDFDocument({ size: 'A4', margin: 50 });doc.pipe(fs.createWriteStream('invoice.pdf'));

// Títulodoc.fontSize(24).text('Fatura nº 12345', { align: 'center' });doc.moveDown();

// Tabela (manualmente)doc.fontSize(12).text('Descrição', 50, 150);doc.text('Qtd', 350, 150);doc.text('Preço', 450, 150);

doc.moveTo(50, 170).lineTo(550, 170).stroke();

doc.text('Serviços de desenvolvimento', 50, 180);doc.text('1', 350, 180);doc.text('150 000 руб.', 450, 180);

doc.moveDown(2);doc.fontSize(16).text('Total: 150 000 руб.',

Recommendations