Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Os relatórios em PDF são indispensáveis em muitas áreas: empresas precisam de notas fiscais, relatórios financeiros, recibos, certificados, propostas comerciais e documentos automatizados. Fazer isso manualmente é demorado, mas com Python é possível gerar PDFs automaticamente de forma profissional, economizando tempo e reduzindo erros.

Neste artigo, você vai aprender:

  • Por que usar PDF em seus projetos.

  • Como gerar PDFs com ReportLab (mais flexível e poderoso).

  • Como gerar PDFs com FPDF (mais simples e rápido).

  • Exemplos práticos de relatórios e documentos.

  • Dicas de boas práticas para PDFs automatizados.


🔹 Por que usar PDF?

O formato PDF (Portable Document Format) é amplamente usado porque:

  • É portátil: abre em qualquer dispositivo.

  • Mantém a formatação independente do sistema.

  • É seguro (pode ter senhas e permissões).

  • Fácil de armazenar e enviar por e-mail.

Com Python, você consegue gerar PDFs personalizados contendo tabelas, imagens, textos formatados e gráficos.


🔹 Instalando as bibliotecas necessárias

Duas bibliotecas populares para PDFs em Python são:

  • ReportLab → flexível e poderoso, ótimo para relatórios complexos.

  • FPDF (fpdf2) → mais simples, ideal para documentos rápidos.

Instalação:

pip install reportlab fpdf2

🔹 Gerando PDFs com ReportLab

ReportLab é a biblioteca mais robusta para criação de PDFs em Python. Ele permite adicionar textos, imagens, tabelas, gráficos e até relatórios complexos.

Exemplo básico com ReportLab

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

# Criando um PDF
pdf = canvas.Canvas("relatorio_reportlab.pdf", pagesize=A4)

# Adicionando título
pdf.setFont("Helvetica-Bold", 18)
pdf.drawString(100, 800, "Relatório de Vendas")

# Adicionando subtítulo
pdf.setFont("Helvetica", 12)
pdf.drawString(100, 770, "Gerado automaticamente com Python - ReportLab")

# Adicionando um texto
pdf.setFont("Helvetica", 10)
pdf.drawString(100, 740, "Produto: Notebook | Quantidade: 5 | Valor Total: R$ 17.502,50")

# Salvando o arquivo
pdf.save()
print("PDF gerado com sucesso!")

📌 Observação: No ReportLab, a página é tratada como um "canvas" (quadro) onde você desenha elementos em posições x, y.


Criando tabelas com ReportLab

Para relatórios, tabelas são essenciais.

from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# Criando PDF
doc = SimpleDocTemplate("tabela_reportlab.pdf", pagesize=A4)

# Dados da tabela
dados = [
    ["Produto", "Quantidade", "Preço Unitário", "Total"],
    ["Notebook", 5, "R$ 3500,50", "R$ 17.502,50"],
    ["Mouse", 10, "R$ 50,75", "R$ 507,50"],
    ["Teclado", 7, "R$ 120,00", "R$ 840,00"]
]

# Criando a tabela
tabela = Table(dados)

# Estilizando
estilo = TableStyle([
    ("BACKGROUND", (0,0), (-1,0), colors.gray),
    ("TEXTCOLOR", (0,0), (-1,0), colors.whitesmoke),
    ("ALIGN", (0,0), (-1,-1), "CENTER"),
    ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
    ("BOTTOMPADDING", (0,0), (-1,0), 12),
    ("GRID", (0,0), (-1,-1), 1, colors.black),
])
tabela.setStyle(estilo)

# Construindo o PDF
doc.build([tabela])
print("Tabela em PDF gerada com sucesso!")

Resultado: um PDF com uma tabela formatada.


🔹 Gerando PDFs com FPDF (fpdf2)

FPDF é uma biblioteca mais simples e intuitiva, ótima para documentos rápidos e relatórios básicos.

Exemplo básico com FPDF

from fpdf import FPDF

# Criando objeto PDF
pdf = FPDF()
pdf.add_page()

# Definindo fonte
pdf.set_font("Arial", size=12)

# Adicionando título
pdf.set_font("Arial", "B", 16)
pdf.cell(200, 10, txt="Relatório de Vendas", ln=True, align="C")

# Texto simples
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Produto: Notebook | Quantidade: 5 | Valor Total: R$ 17.502,50", ln=True)

# Salvando PDF
pdf.output("relatorio_fpdf.pdf")
print("PDF gerado com sucesso!")

Criando tabelas com FPDF

from fpdf import FPDF

pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)

# Cabeçalho da tabela
pdf.cell(50, 10, "Produto", 1, 0, "C")
pdf.cell(40, 10, "Quantidade", 1, 0, "C")
pdf.cell(50, 10, "Preço Unitário", 1, 0, "C")
pdf.cell(50, 10, "Total", 1, 1, "C")

# Dados
dados = [
    ("Notebook", 5, "R$ 3500,50", "R$ 17.502,50"),
    ("Mouse", 10, "R$ 50,75", "R$ 507,50"),
    ("Teclado", 7, "R$ 120,00", "R$ 840,00"),
]

for item in dados:
    pdf.cell(50, 10, item[0], 1, 0, "C")
    pdf.cell(40, 10, str(item[1]), 1, 0, "C")
    pdf.cell(50, 10, item[2], 1, 0, "C")
    pdf.cell(50, 10, item[3], 1, 1, "C")

pdf.output("tabela_fpdf.pdf")
print("Tabela PDF gerada com sucesso!")

📌 O FPDF cria tabelas manualmente célula por célula. É mais simples que o ReportLab, mas exige mais código para tabelas grandes.


🔹 Comparando ReportLab e FPDF

RecursoReportLab (✅)FPDF (✅)
Textos básicos
Tabelas automáticas✅ (muito flexível)❌ (manual)
Imagens
Gráficos embutidos
Simplicidade de uso❌ mais complexo✅ mais simples
Relatórios complexos✅ melhor escolha❌ limitado

📌 Dica prática:

  • Use FPDF para relatórios rápidos e simples.

  • Use ReportLab para relatórios corporativos complexos.


🔹 Casos práticos de uso

  1. Notas fiscais automáticas – sistema que gera PDFs a partir de dados de vendas.

  2. Relatórios financeiros – exportando relatórios de análise em Excel/Pandas para PDF.

  3. Certificados digitais – gerar certificados personalizados para cursos online.

  4. Recibos e contratos – automatizar documentos administrativos.

  5. Dashboards em PDF – gerar relatórios de gráficos de vendas e métricas.


✅ Conclusão

Gerar relatórios em PDF com Python abre um mundo de automação: você pode transformar dados em documentos profissionais, sem depender de software manual.

  • ReportLab é ideal para relatórios complexos, com tabelas e gráficos.

  • FPDF é ideal para documentos simples, fáceis e rápidos.

👉 O próximo passo é integrar a geração de PDFs com bancos de dados ou análises em pandas, criando relatórios dinâmicos que se atualizam automaticamente.


💡 Desafio prático: Crie um sistema que leia dados de vendas de um Excel e gere um relatório em PDF com os totais do mês.

Comentários

Postagens mais visitadas deste blog

Laços de Repetição em Python: Conceitos e Exemplos Práticos

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Como Instalar o Xamarin com C#: Passo a Passo Completo