# Paginação inteligente para relatórios PDF

*Aplica-se ao FastChecker II 3.0 e à base FastChecker II.*

## Objetivo

O sistema de **Paginação Inteligente** foi implementado para evitar espaços longos em branco nos relatórios PDF, otimizando automaticamente a distribuição de conteúdo entre as páginas.

## 🔧 Como Funciona

### Classe `SmartPagination`

A classe `SmartPagination` gerencia automaticamente a distribuição de elementos nas páginas:

```python
from pdf_pagination_utils import create_smart_pagination, get_height_estimate

# Cria gerenciador de paginação
pagination = create_smart_pagination()

# Adiciona elementos com estimativa de altura
pagination.add_element(paragraph, get_height_estimate('paragraph'))
pagination.add_spacer(0.2*inch)

# Força quebra de página se necessário
pagination.add_with_break_if_needed(title, get_height_estimate('title'), force_break=True)

# Adiciona grupo de elementos que devem ficar juntos
pagination.add_group_with_break([element1, element2], total_height)
```

## 📊 Estimativas de Altura Pré-definidas

```python
HEIGHT_ESTIMATES = {
    'title': 50,           # Títulos grandes
    'heading': 30,         # Subtítulos
    'paragraph': 20,       # Parágrafos normais
    'table_header': 25,    # Cabeçalho de tabela
    'table_row': 18,       # Linha de tabela
    'spacer_small': 10,    # Espaçamento pequeno
    'spacer_medium': 20,   # Espaçamento médio
    'spacer_large': 40,    # Espaçamento grande
    'chart_small': 150,    # Gráfico pequeno
    'chart_medium': 250,   # Gráfico médio
    'chart_large': 350,    # Gráfico grande
    'logo': 100,           # Logo
}
```

## 🛠️ Métodos Principais

### `add_element(element, estimated_height=None)`
- Adiciona um elemento com estimativa de altura
- Força quebra de página se não houver espaço suficiente

### `add_with_break_if_needed(element, estimated_height, force_break=False)`
- Adiciona elemento com quebra de página inteligente
- `force_break=True` força nova página antes do elemento

### `add_group_with_break(elements, group_estimated_height)`
- Adiciona grupo de elementos que devem ficar juntos
- Usa `KeepTogether` internamente

### `add_spacer(height)`
- Adiciona espaçamento inteligente
- Pula para próxima página se não houver espaço

## 📋 Módulos Atualizados

### ✅ Antenna Module
- Logo e título com paginação inteligente
- Tabela de histórico otimizada
- Gráficos com quebra inteligente
- Rodapé com quebra forçada

### ✅ Simulador Module
- Cabeçalho com logo e informações
- Tabelas de risco e dados
- Gráficos individuais dos slots
- Rodapé com informações adicionais

### ✅ População Module
- Logo e informações do sistema
- Tabelas de dados otimizadas
- Gráficos com paginação inteligente
- Rodapé completo

### 🔄 Fastsurance Module (Pendente)
- A ser implementado nos próximos commits

## 🎯 Benefícios

1. **Sem Espaços em Branco**: Evita páginas com muito espaço vazio
2. **Conteúdo Agrupado**: Mantém elementos relacionados juntos
3. **Quebras Inteligentes**: Quebra páginas apenas quando necessário
4. **Estimativas Automáticas**: Calcula altura automaticamente
5. **Flexibilidade**: Permite controle manual quando necessário

## 📝 Exemplo de Uso

```python
# Cria paginação inteligente
pagination = create_smart_pagination()

# Adiciona logo
pagination.add_element(logo_img, get_height_estimate('logo'))

# Adiciona título
pagination.add_element(title_paragraph, get_height_estimate('title'))

# Adiciona informações do sistema
pagination.add_element(system_info, get_height_estimate('paragraph'))

# Força quebra para gráficos
pagination.add_with_break_if_needed(
    Paragraph("Gráficos", heading_style),
    get_height_estimate('heading'),
    force_break=True
)

# Adiciona gráfico com título (grupo)
chart_group = [chart_title, chart_image]
pagination.add_group_with_break(chart_group, chart_height)

# Adiciona rodapé com quebra forçada
pagination.add_with_break_if_needed(
    footer_paragraph,
    get_height_estimate('paragraph'),
    force_break=True
)

# Gera PDF
story = pagination.get_story()
doc.build(story)
```

## 🔍 Monitoramento

O sistema inclui logs detalhados para monitoramento:

```
✅ Logo Fasttag adicionado ao PDF (proporção circular)
🔄 Gerando gráficos...
📊 Gráficos gerados: 3
✅ PDF construído com sucesso
```

## 🚀 Resultado Final

Todos os relatórios PDF agora têm:
- **Paginação otimizada** sem espaços em branco desnecessários
- **Conteúdo bem distribuído** entre as páginas
- **Elementos relacionados agrupados** adequadamente
- **Quebras de página inteligentes** apenas quando necessário
- **Aparência profissional** e consistente

