Geração de relatórios PDF em JavaScript (Node.js): bibliotecas e exemplos

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)



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 pdfkit


Exemplo: 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 puppeteer


Exemplo: 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>

Recommendations