Geração de PDF em JavaScript (Node.js): bibliotecas e ferramentas

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 PDF em JavaScript (Node.js): bibliotecas e ferramentas



A geração de documentos PDF é uma das tarefas frequentes no desenvolvimento web. Faturas, relatórios, certificados, bilhetes — tudo isso é conveniente de criar no lado do servidor. No ecossistema Node.js, existem várias soluções maduras, cada uma adequada para cenários específicos. Neste artigo, vamos explorar três abordagens principais e bibliotecas populares para criar PDF em JavaScript.



Visão geral das bibliotecas populares



A escolha da ferramenta depende da complexidade do documento: relatórios de texto simples, tabelas com dados ou layouts complexos com HTML+CSS. Abaixo estão três bibliotecas principais.



1. PDFKit — trabalho de baixo nível com PDF



PDFKit é a biblioteca mais popular para criar PDF "do zero". Ela permite desenhar texto, linhas, retângulos, imagens, usando uma grade de coordenadas. É ideal para documentos dinâmicos com posicionamento preciso.



Vantagens do PDFKit:

  • Controle total sobre cada elemento da página
  • Não requer navegador ou Puppeteer
  • Suporte para incorporação de fontes (TrueType, OpenType)
  • Funciona de forma assíncrona com streams (Stream API)


Exemplo de documento simples:



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

const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));

// Títulodoc.fontSize(25).text('Olá, PDFKit!', 100, 100);

// Texto normaldoc.fontSize(12).text('Este é um documento PDF simples criado em Node.js.', 100, 150);

// Desenhar uma linhadoc.moveTo(100, 200).lineTo(500, 200).stroke();

// Adicionar uma imagemdoc.image('logo.png', 100, 220, { width: 100 });

doc.end();


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



Puppeteer é uma biblioteca para controlar o navegador headless Chrome. Ela permite carregar uma página HTML (ou gerá-la dinamicamente) e salvá-la como PDF. É a melhor escolha se você já possui templates HTML ou estilos CSS complexos.



Vantagens do Puppeteer:

  • Renderização precisa de CSS (flex, grid, fontes)
  • Suporte para JavaScript na página (gráficos, tabelas)
  • Possibilidade de definir formato, margens, cabeçalhos e rodapés
  • Ideal para relatórios e faturas


Exemplo de geração de PDF a partir de HTML:



const puppeteer = require('puppeteer');

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

const html = `<!DOCTYPE html> <html> <head><style> body { font-family: Arial; padding: 20px; } h1 { color: #2c3e50; } table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 8px; } </style></head> <body> <h1>Relatório do mês</h1> <table> <tr><th>Produto</th><th>Quantidade</th></tr> <tr><td>Notebook</td><td>5</td></tr> <tr><td>Mouse</td><td>10</td></tr> </table> </body></html>`;

await page.setContent(html); await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true });

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


3. jsPDF — geração no cliente (e Node.js)



jsPDF foi originalmente criado para o navegador, mas possui uma versão para Node.js. É leve e adequado para documentos simples. No Node.js, é usado através do pacote jspdf com dependências adicionais.



Vantagens do jsPDF:

  • Tamanho pequeno
  • Suporte para Unicode e cirílico (através do carregamento de fontes)
  • Pode funcionar tanto no cliente quanto no servidor

Recommendations