Geração de PDF em JavaScript (Node.js): visão geral de bibliotecas e ferramentas
Criar documentos PDF é uma das tarefas comuns no desenvolvimento web. Seja para gerar faturas, relatórios, certificados ou simplesmente exportar dados, o Node.js oferece várias soluções poderosas. Neste artigo, vamos explorar as principais bibliotecas para trabalhar com PDF no lado do servidor em JavaScript, suas capacidades e exemplos de uso.
Por que gerar PDF no servidor?
A geração de PDF no servidor (em Node.js) oferece várias vantagens:
- Uniformidade — o documento tem a mesma aparência em todos os dispositivos
- Segurança — os dados não saem do servidor
- Automação — é possível criar PDFs agendados ou em eventos específicos
- Suporte a lógica complexa — acesso a bancos de dados, sistema de arquivos e outros recursos
Principais bibliotecas para geração de PDF em Node.js
1. PDFKit
PDFKit é a biblioteca mais popular para criar PDF "do zero". Ela não requer dependências externas e permite controle total sobre o conteúdo do documento.
Exemplo de uso:
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Adicionando conteúdodoc.fontSize(25).text('Olá, mundo!', 100, 100);doc.fontSize(12).text('Este é um PDF criado com PDFKit.', 100, 150);
// Desenhando uma linhadoc.moveTo(100, 200).lineTo(500, 200).stroke();
// Finalizando o documentodoc.end();Recursos:
- Adição de texto com diferentes fontes e tamanhos
- Inserção de imagens (JPEG, PNG)
- Desenho de linhas, retângulos e círculos
- Suporte a links e marcadores
- Criação de documentos com várias páginas
2. Puppeteer
Puppeteer é uma ferramenta para controlar o navegador Chrome/Chromium. Ela permite gerar PDF a partir de páginas HTML, o que é útil para layouts complexos.
Exemplo de uso:
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();
await page.setContent('<h1>Título</h1><p>Texto do documento</p>'); await page.pdf({ path: 'page.pdf', format: 'A4' });
await browser.close();}
generatePDF();Características:
- Suporte a CSS, JavaScript e todas as tecnologias web modernas
- Ideal para converter templates HTML em PDF
- Possibilidade de impressão com parâmetros definidos (formato, margens, escala)
- Requer instalação do Chromium (~300 MB)
3. jsPDF (com adaptação para Node.js)
jsPDF é uma biblioteca cliente, mas existem wrappers para uso em Node.js (por exemplo, jspdf-autotable).
Exemplo (usando jspdf e html2canvas):
const { jsPDF } = require('jspdf');const fs = require('fs');
const doc = new jsPDF();doc.text('Olá do Node.js!', 10, 10);doc.save('output.pdf');Limitações: jsPDF não suporta layouts complexos e requer bibliotecas adicionais para trabalhar com HTML.
4. pdfmake
pdfmake é uma biblioteca baseada na descrição declarativa do documento em formato JSON.
Exemplo:
const pdfmake = require('pdfmake');const fs = require('fs');
const fonts = { Roboto: { normal: 'fonts/Roboto-Regular.ttf', bold: 'fonts/Roboto-Medium.ttf' }};
const printer = new pdfmake(fonts);
const docDefinition = { content: [ { text: Também na biblioteca
Event Bus e padrão Observer em JavaScript (Node.js): implementação e exemplos
Processamento JSON em Java: bibliotecas e ferramentas para trabalhar com JSON
ORM para C++: comparação e exemplos de uso (ODB, SOCI, SQLiteCpp)