Gerando PDF em Python

Minha biblioteca favorita é pdf-reports

Conteúdo da página

Gerando Relatórios em PDF com Python

O Python, com suas extensas bibliotecas e módulos, oferece ferramentas poderosas para gerar relatórios profissionais em PDF. Este guia explora vários métodos para criar documentos PDF usando Python, abordando bibliotecas populares como ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports e PdfKit. Faz parte do nosso Ferramentas de Documentação em 2026: Markdown, LaTeX, PDF e Fluxos de Trabalho de Impressão hub.

python no relatório

Por que Gerar Relatórios em PDF com Python?

  • Automatização: Scripts em Python podem automatizar a geração de relatórios, economizando tempo e reduzindo erros humanos.
  • Personalização: Personalize relatórios para necessidades específicas adicionando texto, imagens, tabelas e gráficos.
  • Consistência: Garanta a consistência da marca em todos os relatórios com modelos padronizados.
  • Versatilidade: Gere recibos, relatórios empresariais, resumos de dados ou qualquer outro tipo de documento.

Bibliotecas Populares do Python para Geração de PDF

ReportLab

ReportLab é uma biblioteca versátil que permite criar documentos PDF programaticamente. Ele suporta a adição de texto, imagens, tabelas e gráficos, tornando-o adequado para vários tipos de relatórios.

Prós:

  • Conjunto rico de recursos
  • API de nível superior para uso fácil
  • Suporta recursos avançados como anotações e formulários interativos

Contras:

  • Curva de aprendizado mais acentuada em comparação com outras bibliotecas
  • API menos intuitiva para algumas tarefas

Usando ReportLab

Instalação: Instale o ReportLab usando o pip:

pip install reportlab

Configuração Básica:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Adicionando Texto:
python c.drawString(100, 800, "Hello World")
# Salvando o PDF:
python c.save()

FPDF

FPDF é uma biblioteca simples, mas poderosa, para criação de documentos PDF escrita em Python puro. É ideal para gerar documentos PDF básicos com código mínimo.

Prós:

  • Fácil de aprender e usar
  • Leve e rápido
  • Suporta caracteres Unicode

Contras:

  • Conjunto de recursos limitado em comparação com o ReportLab
  • Menor controle sobre a posição dos elementos na página

Usando FPDF

Instalação: Instale o FPDF usando o pip:

pip install fpdf2
Configuração Básica:
from fpdf import FPDF pdf = FPDF()

# Adicionando Texto:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Salvando o PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf é um conversor de HTML/CSS para PDF que usa o ReportLab por baixo dos panos. É perfeito para gerar PDFs a partir de modelos HTML, tornando-o uma excelente escolha para conversões de web para PDF.

Prós:

  • Converte HTML e CSS para PDF
  • Suporta layouts e estilização complexos
  • Integra bem com frameworks web como Django

Contras:

  • Requer conhecimento de HTML e CSS
  • Pode não ser adequado para relatórios simples, não baseados em web

Usando Xhtml2pdf

Instalação: Instale o Xhtml2pdf usando o pip:

pip install xhtml2pdf

Gerando um PDF a partir de HTML: python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint é uma biblioteca versátil do Python que permite aos desenvolvedores converter HTML e CSS em documentos PDF com renderização de alta qualidade. É particularmente útil para gerar relatórios, recibos ou qualquer outro documento que exija formatação precisa. Abaixo estão vários exemplos demonstrando como usar o WeasyPrint em diferentes cenários.

Funcionalidades

  • Converte HTML e CSS em documentos PDF.
  • Manipula a renderização de dados dinâmicos com a ajuda de motores de template como Jinja2.

Instalação:

pip install weasyprint

Aqui está um exemplo simples de geração de PDF a partir de uma string HTML:

from weasyprint import HTML

html_string = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Hello, WeasyPrint!</h1>
<p>This is a sample PDF generated using WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

Neste exemplo, a classe HTML do WeasyPrint é usada para converter uma string HTML em um arquivo PDF chamado “sample.pdf”.

Carregando HTML de Arquivos

Você também pode carregar conteúdo HTML diretamente de arquivos:

from weasyprint import HTML

# Carregar HTML de um arquivo
HTML('sample.html').write_pdf('output.pdf')

Este método é útil quando você tem seu conteúdo HTML armazenado em um arquivo externo. Usando Folhas de Estilo CSS

WeasyPrint suporta o uso de folhas de estilo CSS para estilizar seus documentos PDF. Aqui está como você pode aplicar um arquivo CSS:

from weasyprint import HTML

# Carregar HTML e CSS de arquivos
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

Isso permite uma estilização mais complexa, facilitando a criação de PDFs visualmente atraentes.

Jinja2

Jinja2 é um poderoso motor de template para Python que permite gerar conteúdo dinâmico incorporando expressões Python, condicionais e loops dentro de templates. Este guia vai guiá-lo por meio de vários exemplos de uso do Jinja2 em Python, desde a substituição básica de variáveis até recursos mais avançados como herança de templates.

Principais características do Jinja2

  • Um motor de template que pode ser usado em conjunto com WeasyPrint ou ReportLab para gerar dinamicamente conteúdo HTML.
  • Ideal para incorporar dados em templates pré-definidos.
  • Instalação:
pip install jinja2

veja exemplos na página oficial do jinja2: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit é uma poderosa biblioteca Python que simplifica o processo de converter conteúdo HTML em documentos PDF. Age como um wrapper para a utilidade wkhtmltopdf, aproveitando o WebKit para renderizar páginas HTML com precisão no formato PDF. Este guia vai guiá-lo por meio de vários exemplos e casos de uso de geração de PDFs usando pdfkit.

Funcionalidades principais

Instalação:

# e assegure-se de que o wkhtmltopdf esteja instalado.

Uso Básico - Convertendo uma String HTML em PDF

Você pode converter uma simples string HTML em um arquivo PDF usando pdfkit.from_string():

import pdfkit

html_sample = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>This is a heading</h1>
<p>First line.</p>
<p>Second line.</p>
<p>Third line.</p>
<p>Fourth line.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

Isso gerará um arquivo PDF chamado output.pdf no diretório atual.

Convertendo um Arquivo HTML Local em PDF

Se você tiver um arquivo HTML armazenado localmente, use pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

Biblioteca de Relatórios em PDF (pdf-reports)

Criar relatórios em PDF usando a biblioteca pdf-reports em Python pode ser uma forma poderosa de gerar documentos profissionais a partir de templates HTML ou Pug. Esta biblioteca aproveita componentes modernos via framework Semantic UI e fornece rotinas para incorporar tabelas, gráficos e outros elementos em seus PDFs.

A biblioteca pdf-reports foi projetada para criar relatórios em PDF visualmente atraentes a partir de templates HTML ou Pug. Ela suporta oficialmente o Python 3.x, mas também pode funcionar no Python 2.x com a versão apropriada do weasyprint. Isso a torna uma ferramenta versátil para gerar documentos dinâmicos e bem estruturados de forma programática.

Funcionalidades Principais

  • Componentes Modernos: Utiliza o framework Semantic UI para componentes modernos.
  • Incorporação de Elementos: Permite incorporar tabelas, gráficos e outros elementos nos PDFs.
  • Suporte a Templates: Suporta templates HTML e Pug para design flexível de relatórios.

Exemplo de Uso do pdf-reports

Instalação:

pip install pdf-reports

Aqui está um exemplo básico de como usar a biblioteca pdf-reports:

from pdf_reports import PDFReport

# Defina seu arquivo de template (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p This is a sample report.
"""

# Crie uma instância de relatório PDF
report = PDFReport(template)

# Defina o contexto para o template
context = {
    'title': 'Relatório de Exemplo'
}

# Gere o PDF
pdf = report.generate(context, output='sample_report.pdf')

Desenvolvimento de PDF em Python

O Python oferece uma gama de bibliotecas poderosas para gerar relatórios em PDF. Seja criando recibos, relatórios empresariais ou resumos de dados, essas ferramentas permitem automatizar o processo, personalizar seus documentos e garantir a consistência da marca. Escolha a biblioteca que melhor se encaixa nas suas necessidades e comece a criar PDFs profissionais hoje!