1. Fundamentos do uso do ReportLab
Trabalhando com Canvas
A ferramenta principal para criar documentos PDF no ReportLab é a classe canvas. Ela oferece métodos para adicionar texto, linhas, retângulos e outros elementos gráficos.
Criando um arquivo PDF simples com texto
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Criamos um novo arquivo PDF
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4
# Adicionamos texto
pdf_file.setFont("Helvetica", 12) # Configuramos a fonte e o tamanho
pdf_file.drawString(100, height - 100, "Oi! Este é um relatório criado com o ReportLab.")
# Salvamos e fechamos o PDF
pdf_file.save()
Neste exemplo, criamos um arquivo PDF simples com o texto "Oi! Este é um relatório criado com o ReportLab." na primeira página.
2. Adicionando texto no PDF
O ReportLab permite personalizar texto de forma flexível, incluindo tamanho, fonte e cor. Isso é importante para criar relatórios estruturados, onde títulos, subtítulos e texto principal precisam ter aparências diferentes.
Definindo fonte e tamanho do texto
Use o método setFont() para definir a fonte e o tamanho do texto. O ReportLab suporta fontes padrão como Helvetica, Times-Roman e Courier.
pdf_file.setFont("Helvetica-Bold", 16) # Fonte em negrito
pdf_file.drawString(100, height - 50, "Relatório de Vendas") # Título
Alterando a cor do texto
O ReportLab permite definir a cor do texto usando o método setFillColorRGB(), que recebe valores RGB de 0 a 1.
pdf_file.setFillColorRGB(0, 0, 1) # Cor azul
pdf_file.drawString(100, height - 150, "Este texto é azul.")
3. Trabalhando com blocos de texto e texto multilinha
Se o texto é longo, ele pode ser formatado como um bloco, usando drawString() e especificando as coordenadas para cada linha. Para quebra automática de texto, é mais conveniente usar drawText() e TextObject.
Adicionando texto multilinha com TextObject
text = """
Relatório de vendas de 2023.
Este relatório contém informações detalhadas sobre vendas, análise de dados e previsões.
"""
# Criando um objeto de texto
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)
# Adicionando texto
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
Neste exemplo, criamos um objeto de texto TextObject que automaticamente quebra cada linha de texto.
4. Criando relatórios de múltiplas páginas
Relatórios com várias páginas permitem incluir mais dados e estruturar o documento de forma mais amigável para leitura. No ReportLab, usamos o método showPage() para passar para uma nova página.
Criando um PDF de várias páginas
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Criamos o PDF
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4
# Página 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Página 1: Introdução")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Esta é a primeira página do relatório.")
pdf_file.showPage() # Novo página
# Página 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Página 2: Dados")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Esta é a segunda página do relatório.")
# Salvamos o PDF
pdf_file.save()
Neste exemplo, criamos um PDF com duas páginas, cada uma contendo seu próprio título e texto. O método showPage() finaliza a página atual e inicia uma nova.
5. Adicionar dados dinâmicos no PDF
Para automação de relatórios, o ReportLab permite adicionar dados dinamicamente, como de uma lista ou dicionário. Isso é útil para criar relatórios com tabelas ou listas de dados que mudam com frequência.
Adicionando dados de uma lista
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
data = [
{"Mês": "Janeiro", "Vendas": 200},
{"Mês": "Fevereiro", "Vendas": 300},
{"Mês": "Março", "Vendas": 250},
]
pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4
# Título
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Relatório de Vendas")
# Adicionando dados
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
line = f"{item['Mês']}: Vendas = {item['Vendas']}"
pdf_file.drawString(100, y_position, line)
y_position -= 20
# Salvamos o PDF
pdf_file.save()
Este código cria um arquivo PDF adicionando dados de vendas de cada mês em linhas separadas.
6. Adicionando imagens
Além de texto, um documento PDF pode conter imagens e gráficos. Vamos tentar adicionar uma imagem:
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def create_pdf_with_image(file_path):
c = canvas.Canvas(file_path, pagesize=letter)
width, height = letter
c.drawString(100, height - 100, "Aqui está sua imagem:")
# Caminho para sua imagem
image_path = "example_image.jpg"
c.drawImage(image_path, 100, height - 300, width=200, height=150)
c.showPage()
c.save()
file_path = "image_example.pdf"
create_pdf_with_image(file_path)
Simples, né? Agora temos um PDF com uma imagem!
Agora que você sabe como criar PDFs com texto e imagens, pense em como pode aplicar isso na vida real. Imagine que você trabalha em uma empresa de análise e precisa gerar relatórios de vendas todos os meses. Em vez de criar o documento manualmente sempre, você pode escrever um script que coleta dados automaticamente e gera o relatório em PDF. Isso economiza seu tempo e melhora a precisão e consistência dos dados no relatório.
7. Adicionando tabelas no PDF
Agora vamos dar um pequeno passo além do texto simples. E se quisermos adicionar dados, como uma lista de produtos e seus preços? Aqui está um exemplo bem simples:
from reportlab.lib.pagesizes = letter
import canvas
items = [("Ferro", 42.99), ("Chaleira", 15.00), ("Televisor", 250.00)]
GO TO FULL VERSION