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

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): Guia completo



Criar documentos PDF é uma das tarefas mais requisitadas no desenvolvimento web. Seja para exportar faturas, gerar relatórios analíticos ou criar certificados — não há como evitar uma ferramenta confiável. No ecossistema Node.js, existem várias bibliotecas poderosas que permitem resolver essa tarefa de forma rápida e flexível. Neste artigo, vamos analisar três abordagens principais e mostrar como escolher a ferramenta adequada para o seu projeto no PythonLib.



Por que gerar PDF no servidor?

A geração no lado do cliente (navegador) é frequentemente limitada: o usuário pode perder dados ao atualizar a página, e dispositivos móveis nem sempre processam layouts complexos corretamente. A abordagem no servidor com Node.js oferece controle total sobre a estrutura do documento, protege a lógica de negócios e permite integrar a geração em pipelines de CI/CD.



Top 3 bibliotecas para trabalhar com PDF em Node.js



1. PDFKit — trabalho de baixo nível com conteúdo

PDFKit é a biblioteca mais popular para criar PDF do zero. Ela não requer a instalação de dependências adicionais (como Chromium) e permite controlar cada pixel do documento.

  • Prós: leve (apenas alguns megabytes), total liberdade de layout, suporte a fontes, imagens, gráficos vetoriais.
  • Contras: é necessário escrever muito código para layouts complexos, não há quebra de texto automática.

Exemplo de criação de uma fatura simples:

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

const doc = new PDFDocument({ margin: 50 });

doc.pipe(fs.createWriteStream('invoice.pdf'));

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

// Tabeladoc.fontSize(12).text('Produto: Consultoria', { continued: true }) .text('Preço: 5000 RUB', { align: 'right' });

doc.moveDown();doc.text('Total: 5000 RUB', { align: 'right' });

doc.end();


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

Puppeteer executa um navegador headless Chromium e converte uma página HTML em PDF. É a escolha ideal se você já possui templates em HTML com estilos CSS.

  • Prós: layout simples via HTML, suporte a todas as propriedades CSS (flex, grid, @media print), possibilidade de adicionar cabeçalhos e rodapés.
  • Contras: dependência pesada (~300 MB Chromium), inicialização lenta, não é adequado para documentos simples.

Exemplo de conversão de HTML para PDF:

const puppeteer = require('puppeteer');

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

await page.setContent(`<h1 style="color: blue;">Relatório de março de 2025</h1> <p>Receita total: <strong>1 200 000 RUB</strong></p>`);

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

await browser.close();}

generateReport();


3. jsPDF — ferramenta universal (cliente + servidor)

jsPDF é uma biblioteca que funciona tanto no navegador quanto no Node.js. Ela fornece métodos de alto nível para criar tabelas, gráficos e até incorporar fontes.

  • Prós: API simples, suporte integrado a tabelas (através de plugin), peso pequeno.
  • Contras: no servidor, requer configuração manual de fontes (nem todos os caracteres cirílicos estão disponíveis por padrão).

Exemplo com tabela:

const { jsPDF } = require("jspdf");require("jspdf-autotable");

const doc = new jsPDF();

doc.text("Estatísticas de vendas", 14, 20);

doc.autoTable({ head: [['Mês', 'Vendas', 'Lucro']], body: [ ['Janeiro', '100', '20 000'],

Recommendations