CodeGym /Cursos /Python SELF PT /Noções básicas para criar PDF com texto na automação de r...

Noções básicas para criar PDF com texto na automação de relatórios

Python SELF PT
Nível 44 , Lição 2
Disponível

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

Python

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.

Python

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.

Python

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

Python

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

Python

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

Python

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:

Python

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:

Python

from reportlab.lib.pagesizes = letter
import canvas

items = [("Ferro", 42.99), ("Chaleira", 15.00), ("Televisor", 250.00)]

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION