CodeGym /Cursos /Python SELF PT /Criação e estruturação de arquivos PDF para geração de re...

Criação e estruturação de arquivos PDF para geração de relatórios

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

1. Estrutura de documentos PDF para relatórios

Bora começar a aprender como salvar e estruturar arquivos PDF para criar relatórios, pra que seus relatórios fiquem com cara de que foram feitos por um designer profissional.

Vamos começar do básico. Como já deve saber, bons relatórios não só precisam ter informações úteis, mas também serem fáceis de entender. Isso significa que eles precisam de uma estrutura adequada. Bora ver como fazer seus relatórios serem não só informativos, mas também bem apresentados.

Como organizar e estruturar PDFs direito

A estrutura de um documento é como o plano do seu bloco de código, só que no mundo dos textos. Uma boa estrutura inclui:

  • Sumário: Ajuda a entender rapidamente o que tem no documento e onde procurar. Se o seu relatório for grande, o sumário vai ser seu melhor amigo.
  • Seções e Subseções: A ordem lógica das informações ajuda o leitor a acompanhar o raciocínio do autor. Tipo na vida: primeiro a introdução, depois o clímax, e no final a conclusão.
  • Elementos visuais: Tabelas, gráficos e imagens geralmente falam mais do que páginas de texto.

Criando sumários e seções para uma navegação fácil

Criar sumários e seções é chave para fazer seu relatório não parecer um monte de texto sem fim. Separe as informações em blocos lógicos e não esqueça dos títulos.

Python

from PyPDF2 import PdfWriter, PdfReader

# Criando um novo documento PDF
writer = PdfWriter()

# Adicionando uma página em branco
writer.add_blank_page(width=210, height=297)  # Formato padrão A4

# Gravando PDF em um arquivo
with open("report.pdf", "wb") as f:
    writer.write(f)

2. Geração de relatórios em formato PDF

Agora que sabemos como estruturar um relatório, é hora de colocá-lo em prática. PyPDF2 é seu parceiro nessa tarefa.

Usando PyPDF2 para criar relatórios a partir de dados

Criar relatórios a partir de dados não é só copiar e colar. Seus documentos têm que estar vivos, tipo seu gato quando você tenta trabalhar. PyPDF2 te ajuda a extrair dados, adicioná-los ao documento e até personalizar a aparência deles.

Python

import PyPDF2

# Abrindo um PDF existente
with open('source.pdf', 'rb') as read_file:
    reader = PdfReader(read_file)
    writer = PdfWriter()

    # Copiando páginas para um novo arquivo
    for page in reader.pages:
        writer.add_page(page)

    # Adicionando um título
    writer.add_blank_page()
    page = writer.pages[-1]
    page.content = """Oi! Este é meu relatório!""" # Erro!!
    
    # Gravando em um novo arquivo
    with open('structured_report.pdf', 'wb') as write_file:
        writer.write(write_file)

Infelizmente esse código não vai funcionar. PyPDF2 não suporta trabalhar com o conteúdo da página, e nem mesmo adicionar texto. Se precisar adicionar texto a um PDF existente, pode usar `ReportLab`.

3. Usando `ReportLab`

Nesse exemplo corrigido, vamos criar um PDF com PyPDF2, e para adicionar texto vamos usar `ReportLab`. Depois, vamos juntar tudo em um único PDF.

Código corrigido usando `ReportLab` para adicionar texto

Python

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

# Criando um arquivo com cabeçalho usando ReportLab
title_pdf = "title_page.pdf"
c = canvas.Canvas(title_pdf, pagesize=A4)
c.drawString(100, 800, "Oi! Este é meu relatório!")
c.save()

# Criando um PDF combinado
with open("source.pdf", "rb") as source_file, open(title_pdf, "rb") as title_file:
    reader_source = PyPDF2.PdfReader(source_file)
    reader_title = PyPDF2.PdfReader(title_file)
    writer = PyPDF2.PdfWriter()

    # Adicionando a página de título
    writer.add_page(reader_title.pages[0])

    # Copiando páginas do arquivo original
    for page in reader_source.pages:
        writer.add_page(page)

    # Salvando o novo PDF com título
    with open("structured_report.pdf", "wb") as output_file:
        writer.write(output_file)

print("Relatório criado e salvo com sucesso como 'structured_report.pdf'.")

Explicação das correções:

  1. Criando a página de título: Usamos `ReportLab` para criar um arquivo PDF com o texto "Oi! Este é meu relatório!".
  2. Combinando PDFs: Usamos `PyPDF2` para adicionar a página de título e as outras páginas de `source.pdf`.
  3. Salvando o arquivo final: Salvamos o PDF combinado em `structured_report.pdf`.

Adicionando títulos e seções para uma melhor estruturação

Agora que já temos a base do documento, vamos adicionar um pouco de estrutura. Títulos e subtítulos ajudam a não se perder na floresta de informações. PyPDF2 permite incorporar páginas, mas se precisar de algo mais avançado, como personalizar fontes, talvez seja melhor usar a biblioteca ReportLab.

Python

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

def create_pdf(filename):
    # Criando um canvas PDF
    c = canvas.Canvas(filename, pagesize=letter)
    text = c.beginText(40, 750)

    # Título
    text.setFont("Helvetica-Bold", 18)
    text.textLine("Relatório do Projeto 'Ultra-Secreto'")

    # Subtítulo
    text.setFont("Helvetica", 14)
    text.textLine("Capítulos:")
    text.textLine("1. Introdução")
    text.textLine("2. Análise de Dados")
    text.textLine("3. Conclusão")

    c.drawText(text)
    c.save()

create_pdf("detailed_report.pdf")

Erros e armadilhas

Assim como em qualquer programação, trabalhar com PDFs tem suas armadilhas. Um dos maiores problemas é usar os índices das páginas corretamente. No PyPDF2, como no Python em geral, os índices começam do zero. Preste atenção para não adicionar páginas erradas no seu relatório.

Outro ponto que pode dar dor de cabeça é o encoding dos textos. Documentos PDF podem ter textos codificados em formatos diferentes. Certifique-se de que seu código consegue lidar bem com os caracteres, especialmente se seu relatório for usado em vários idiomas.

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