Gerando PDF em Python

Minha biblioteca favorita é pdf-reports

Conteúdo da página

Gerando Relatórios PDF com Python

O Python, com suas extensas bibliotecas e módulos, oferece ferramentas poderosas para gerar relatórios PDF profissionais.

Este guia explora vários métodos para criar documentos PDF usando Python, abrangendo bibliotecas populares como ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports e PdfKit.

python no relatório

Por que Gerar Relatórios PDF com Python?

  • Automatização: Scripts 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 faturas, 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.

Vantagens:

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

Desvantagens:

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

Usando ReportLab

Instalação: Instale ReportLab usando 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 criar documentos PDF escrita em Python puro. É ideal para gerar documentos PDF básicos com código mínimo.

Vantagens:

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

Desvantagens:

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

Usando FPDF

Instalação: Instale FPDF usando 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 ReportLab em segundo plano. É perfeito para gerar PDFs a partir de modelos HTML, tornando-o uma excelente escolha para conversões de web para PDF.

Vantagens:

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

Desvantagens:

  • 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 Xhtml2pdf usando 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, faturas ou qualquer outro documento que exija formatação precisa. Abaixo estão vários exemplos demonstrando como usar 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 um estilização mais complexa, tornando mais fácil criar PDFs visualmente atraentes .

Jinja2

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

Funcionalidades principais do Jinja2

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

veja exemplos na página de documentação oficial do jinja2: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

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

Funcionalidades principais

Instalação:

# e garantir 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 PDF (pdf-reports)

Criar relatórios PDF usando a biblioteca pdf-reports no 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 embutir tabelas, gráficos e outros elementos em seus PDFs.

A biblioteca pdf-reports foi projetada para criar relatórios PDF visualmente atraentes a partir de templates HTML ou Pug. Ela suporta oficialmente Python 3.x, mas também pode funcionar em 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.
  • Embutimento de Elementos: Permite embutir 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 de 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 PDF. Seja você criando faturas, 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 adapte às suas necessidades e comece a criar PDFs profissionais hoje!