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

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): guia completo de bibliotecas e ferramentas



A geração de documentos PDF é uma das tarefas mais requisitadas no desenvolvimento web. Desde a criação de faturas e relatórios até a formação de documentos complexos de várias páginas, o Node.js oferece ferramentas poderosas para trabalhar com PDF. Neste artigo, vamos explorar as principais bibliotecas e abordagens para criar arquivos PDF no lado do servidor com JavaScript.



Por que gerar PDF no servidor?

A geração de PDF no servidor permite:

  • Criar documentos dinamicamente com base em dados do banco
  • Garantir consistência na formatação
  • Trabalhar com grandes volumes de dados sem sobrecarregar o cliente
  • Integrar-se com sistemas de relatórios existentes


Principais bibliotecas para geração de PDF em Node.js



1. pdfkit — solução clássica

pdfkit é uma das bibliotecas mais populares para criar PDF do zero. Ela oferece controle total sobre o conteúdo do documento: texto, imagens, tabelas, gráficos vetoriais.



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

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

// Adicionando textodoc.fontSize(25).text('Olá, mundo!', 100, 100);

// Desenhando uma linhadoc.moveTo(100, 150).lineTo(400, 150).stroke();

// Inserindo imagemdoc.image('logo.png', 100, 200, { width: 100 });

doc.end();


Vantagens: leve, rápido, suporta Unicode e cirílico, várias fontes.

Desvantagens: requer configuração manual do layout, sem suporte nativo a HTML.



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

Puppeteer é uma biblioteca para controlar o navegador Chrome headless. Ela permite converter páginas HTML em PDF mantendo todos os estilos e scripts.



const puppeteer = require('puppeteer');

async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setContent('<h1 style="color: red;">Título do PDF</h1><p>Texto do documento</p>'); await page.pdf({ path: 'output.pdf', format: 'A4', margin: { top: '20px', bottom: '20px' } }); await browser.close();}

generatePDF();


Vantagens: ideal para layouts HTML complexos, suporta CSS, JavaScript, fontes.

Desvantagens: pesado (requer Chromium), mais lento que outras bibliotecas.



3. pdf-lib — modificação de PDFs existentes

pdf-lib é especializada em editar documentos PDF existentes. Permite adicionar texto, imagens, preencher formulários.



const { PDFDocument } = require('pdf-lib');const fs = require('fs');

async function editPDF() { const existingPdfBytes = fs.readFileSync('template.pdf'); const pdfDoc = await PDFDocument.load(existingPdfBytes); const pages = pdfDoc.getPages(); const firstPage = pages[0]; firstPage.drawText('Novo texto', { x: 50, y: 50, size: 20, color: rgb(0, 0, 0) }); const pdfBytes = await pdfDoc.save(); fs.writeFileSync('modified.pdf', pdfBytes);}

editPDF();


Vantagens: leve, sem dependências externas, funciona bem com formulários.

Desvantagens: recursos limitados para criar layouts complexos do zero.



4. jsPDF — solução cliente-servidor

jsPDF foi originalmente criada para o navegador, mas também funciona em Node.js. Adequada para documentos simples.



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

const doc = new jsPDF();doc.text("Hello world!", 10, 10);doc.save("output.pdf");


Vantagens: API simples, funciona no cliente e no servidor.

Desvantagens:

Recommendations