diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md deleted file mode 100644 index 296f957..0000000 --- a/ARCHITECTURE.md +++ /dev/null @@ -1,254 +0,0 @@ -# 🏗️ Arquitetura do PDF Builder - -## 📋 Visão Geral - -O PDF Builder é estruturado em torno de um conjunto central de classes que trabalham juntas para criar documentos PDF. Cada classe tem uma responsabilidade específica e se integra com as outras de forma coesa. - -## 🔄 Fluxo de Execução - -1. O usuário começa criando uma `PDFConfiguration` -2. Essa configuração é usada para instanciar um `PDFBuilder` -3. O `PDFBuilder` usa internamente: - - `SafeArea` para gerenciar margens - - `Coordinates` para posicionamento - - `ResourceManager` para recursos - -## 🧩 Componentes Principais - -### PDFBuilder -- **Papel**: Ponto de entrada principal da biblioteca -- **Responsabilidades**: - - Gerencia o documento PDF - - Coordena operações de escrita - - Controla o fluxo de conteúdo -- **Dependências**: - - `PDFConfiguration` - - `SafeArea` - - `ResourceManager` - - `Coordinates` - -### PDFConfiguration -- **Papel**: Configuração imutável do documento -- **Responsabilidades**: - - Define tamanho da página - - Configura margens - - Define DPI e compressão - - Estabelece configurações de fonte -- **Dependências**: Nenhuma (classe imutável) - -### SafeArea -- **Papel**: Gerenciamento de área segura de escrita -- **Responsabilidades**: - - Calcula áreas úteis - - Valida posições - - Gerencia margens -- **Dependências**: - - `PDFConfiguration` (apenas na criação) - -### Coordinates -- **Papel**: Sistema de coordenadas -- **Responsabilidades**: - - Rastreia posição atual - - Calcula movimentações - - Valida limites -- **Dependências**: - - `SafeArea` - -### ResourceManager -- **Papel**: Gerenciamento de recursos do PDF -- **Responsabilidades**: - - Gerencia fontes - - Controla streams - - Libera recursos -- **Dependências**: - - `PDFConfiguration` - -## 🔗 Diagrama de Dependências - -``` -PDFBuilder -├─> PDFConfiguration -├─> SafeArea -│ └─> PDFConfiguration -├─> Coordinates -│ └─> SafeArea -└─> ResourceManager - └─> PDFConfiguration -``` - -## 📊 Fluxo de Dados - -1. **Configuração**: - ``` - PDFConfiguration (imutável) - └─> Usado por todas as outras classes - ``` - -2. **Posicionamento**: - ``` - PDFBuilder - ├─> Coordinates (calcula posição) - └─> SafeArea (valida posição) - ``` - -3. **Renderização**: - ``` - PDFBuilder - ├─> ResourceManager (prepara recursos) - └─> Apache PDFBox (renderiza) - ``` - -## 🔒 Garantias e Invariantes - -1. **PDFConfiguration** - - Sempre imutável - - Valores sempre validados na criação - - Nunca null após construção - -2. **SafeArea** - - Margens sempre positivas - - Área útil sempre menor que página - - Coordenadas sempre validadas - -3. **Coordinates** - - Sempre dentro da SafeArea - - Movimentos sempre validados - - Posição atual sempre conhecida - -4. **ResourceManager** - - Recursos sempre liberados - - Fontes sempre carregadas - - Streams sempre fechados - -## 🔄 Ciclo de Vida - -1. **Inicialização** - ``` - new PDFConfiguration() - └─> new PDFBuilder(config) - ├─> new SafeArea(config) - ├─> new Coordinates(safeArea) - └─> new ResourceManager(config) - ``` - -2. **Operação** - ``` - PDFBuilder.addText() - ├─> Coordinates.getPosition() - ├─> SafeArea.validate() - └─> ResourceManager.getFont() - ``` - -3. **Finalização** - ``` - PDFBuilder.save() - └─> ResourceManager.close() - ``` - -## 📝 Convenções de Código - -1. **Imutabilidade** - - `PDFConfiguration` é completamente imutável - - Outros objetos são mutáveis mas thread-safe - -2. **Validação** - - Todas as entradas são validadas - - Falhas geram exceções descritivas - - Estado inválido é impossível - -3. **Recursos** - - Todos os recursos são gerenciados - - Cleanup automático no fechamento - - Sem vazamentos de memória - -## 🚀 Pontos de Extensão - -1. **Componentes Futuros** - - Sistema de tabelas - - Suporte a imagens - - Estilos avançados - -2. **Melhorias Planejadas** - - Cache de recursos - - Otimização de renderização - - Suporte a threads - -## 🎯 Decisões de Design - -1. **Por que Imutável?** - - `PDFConfiguration` é imutável para thread-safety - - Facilita cache e otimização - - Previne bugs de estado - -2. **Por que SafeArea?** - - Abstrai complexidade de margens - - Facilita validação de posições - - Melhora usabilidade - -3. **Por que ResourceManager?** - - Centraliza gestão de recursos - - Previne vazamentos - - Facilita otimizações - -## 📚 Exemplos de Uso - -Ver `PDFBuilderDemo.java` para exemplos práticos de: -- Configuração básica -- Manipulação de texto -- Movimentação no documento -- Gestão de recursos - -## Componentes de Texto - -### SimpleText -- Componente básico para renderização de texto -- Suporta: - * Fonte e tamanho - * Cor - * Quebra automática de linha - * Espaçamento entre linhas -- Implementa builder pattern para configuração -- Respeita área segura do documento - -### Paragraph -- Componente avançado para parágrafos com formatação rica -- Suporta todos os recursos do SimpleText mais: - * Múltiplos estilos no mesmo parágrafo - - Negrito (Bold) - - Itálico (Oblique) - - Sublinhado com espessura configurável - - Cores personalizadas - * Alinhamentos - - Esquerda (LEFT) - - Centro (CENTER) - - Direita (RIGHT) - - Justificado (JUSTIFIED) - * Justificação com distribuição uniforme de espaços - * Quebra inteligente de palavras -- Classes auxiliares: - * TextStyle: Define estilo de formatação - * StyledText: Associa texto com estilo - * TextAlignment: Enum de alinhamentos - -### Estratégias de Implementação - -#### Renderização de Texto -- Usa PDPageContentStream para desenho direto -- Calcula posições baseado em métricas da fonte -- Respeita margens e área segura -- Atualiza coordenadas após renderização - -#### Alinhamento Justificado -- Calcula espaço extra disponível na linha -- Distribui uniformemente entre palavras -- Última linha não é justificada -- Mantém formatação individual das palavras - -#### Quebra de Linha -- Respeita largura máxima disponível -- Preserva palavras inteiras -- Mantém estilos ao quebrar linha -- Calcula altura baseada no maior tamanho de fonte da linha - -## Exemplos -Veja `examples/ParagraphDemo.java` para demonstração completa das funcionalidades de texto. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 3d078d8..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,171 +0,0 @@ -# Contributing Guide - -Thank you for considering contributing to PDF Builder! This document provides guidelines for contributing to the project. - -## Getting Started - -1. Fork the repository -2. Clone your fork (`git clone git@github.com:your-username/pdf-builder.git`) -3. Create your feature branch (`git checkout -b feature/AmazingFeature`) -4. Commit your changes (`git commit -m 'feat: add some amazing feature'`) -5. Push to the branch (`git push origin feature/AmazingFeature`) -6. Open a Pull Request - -## Git Workflow - -### Branches -- `main`: Production code -- `develop`: Development code for next release -- `feature/*`: New features -- `bugfix/*`: Bug fixes -- `release/*`: Release preparation - -### Development Process -1. **New Feature** - ```bash - git checkout develop - git pull origin develop - git checkout -b feature/feature-name - # Develop your feature - git commit -m "feat: description of the feature" - ``` - -2. **Bug Fix** - ```bash - git checkout develop - git pull origin develop - git checkout -b bugfix/bug-description - # Fix the bug - git commit -m "fix: description of the fix" - ``` - -3. **Commits** - We follow Conventional Commits: - - `feat:` New feature - - `fix:` Bug fix - - `docs:` Documentation changes - - `test:` Adding/modifying tests - - `refactor:` Code refactoring - - `style:` Formatting, semicolons, etc - - `chore:` Build updates, dependencies, etc - -4. **Pull Requests** - - Create PR from your branch to `develop` - - Wait for code review - - Ensure all checks pass: - - Build - - Tests - - Coverage (min 80%) - - Checkstyle - - SpotBugs - -5. **Release** - ```bash - git checkout develop - git checkout -b release/v1.x.x - # Update version in pom.xml - git commit -m "chore: bump version to v1.x.x" - # After testing and approval - git checkout main - git merge release/v1.x.x - git tag v1.x.x - ``` - -## Code Quality - -### Before Submitting a PR -1. Run tests: `mvn test` -2. Check coverage: `mvn jacoco:report` -3. Run checkstyle: `mvn checkstyle:check` -4. Run spotbugs: `mvn spotbugs:check` -5. Format your code -6. Update documentation if needed - -### Code Standards -- Follow Google Java Style Guide -- Keep methods small and focused -- Write tests for new code -- Document public APIs with JavaDoc -- Maintain test coverage above 80% - -## Development Requirements - -### Java -- Use Java 17 or higher -- Follow Java best practices -- Keep dependencies up to date - -### Testing -- Write unit tests for new features -- Include integration tests when needed -- Follow test naming convention: `given_when_then` -- Mock external dependencies - -### Documentation -- Update README.md for new features -- Keep JavaDoc up to date -- Include code examples -- Document breaking changes - -## Development Environment Setup - -### Git Hooks - -The project uses Git hooks to maintain code quality. These are automatically installed by Maven when you build the project. - -The hooks enforce our quality standards: - -**Pre-commit:** -- Code style (Checkstyle) -- Compilation check - -**Pre-push:** -- Unit tests -- Test coverage (minimum 80%) -- Static analysis (SpotBugs) - -## Issues - -- Check existing issues before creating a new one -- Use appropriate labels -- Clearly describe the problem or feature -- Include steps to reproduce bugs - -## Branches - -- `main`: Always stable -- `develop`: Development branch -- `feature/*`: New features -- `fix/*`: Bug fixes -- `docs/*`: Documentation updates - -## Pull Requests - -- Clearly describe changes -- Reference related issues -- Wait for review before merging -- Keep PRs small and focused - -## Running Tests - -```bash -# Run all tests -mvn clean test - -# Run tests for a specific class -mvn test -Dtest=ClassNameTest - -# Run a specific test -mvn test -Dtest=ClassNameTest#methodName -``` - -## Documentation - -- Keep README.md up to date -- Document new features -- Update examples when necessary -- Include comments in complex code - -## Questions? - -If you have questions about contributing, open an issue with the `question` label. diff --git a/README.md b/README.md index 92dcaad..51d7336 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,29 @@ # PDF Builder -Uma biblioteca Java de alto nível para construção de PDFs, abstraindo toda a complexidade do Apache PDFBox. +A high-level Java library for PDF generation that abstracts away the complexity of Apache PDFBox, providing an intuitive and developer-friendly API. -## Requisitos +[![Build Status](https://github.com/joabsonlg/pdf-builder/actions/workflows/build.yml/badge.svg)](https://github.com/joabsonlg/pdf-builder/actions) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) +[![Java Version](https://img.shields.io/badge/java-17%2B-blue)](https://adoptium.net/) -- Java 17 ou superior -- Apache PDFBox 3.0.1 -- Maven 3.x - -## Qualidade de Código - -O projeto utiliza várias ferramentas para garantir a qualidade do código: - -### Checkstyle -- Garante consistência no estilo de código -- Verifica padrões de codificação Java -- Configurado com regras baseadas no Google Java Style -- Execute com: `mvn checkstyle:check` - -### JaCoCo -- Cobertura mínima de código: 80% -- Monitora execução de testes -- Gera relatórios detalhados de cobertura -- Relatório disponível em: `target/site/jacoco/index.html` -- Execute com: `mvn test jacoco:report` +## Features -### SpotBugs -- Análise estática para encontrar bugs potenciais -- Verifica problemas de segurança -- Identifica más práticas de programação -- Execute com: `mvn spotbugs:check` +- **Simple API**: Create professional PDFs with minimal code +- **Rich Components**: Headers, paragraphs, tables, lists, images, and more +- **Smart Layout**: Automatic page breaks and content positioning +- **Highly Configurable**: Customize every aspect of your PDF +- **Type-Safe**: Builder pattern with strong typing for error-free development +- **Well-Tested**: Extensive test coverage ensuring reliability +- **Well-Documented**: Comprehensive documentation with examples -## Dependências Principais +## Requirements -- Apache PDFBox 3.0.1 -- Commons IO 2.15.1 -- SLF4J 2.0.11 -- JUnit Jupiter 5.10.1 (para testes) +- Java 17 or higher +- Maven 3.x -## Instalação +## Installation -Para incluir o PDF Builder em seu projeto Maven, adicione a seguinte dependência ao seu `pom.xml`: +Add the following dependency to your `pom.xml`: ```xml @@ -50,85 +33,31 @@ Para incluir o PDF Builder em seu projeto Maven, adicione a seguinte dependênci ``` -## Estrutura do Projeto +## Quick Start +```java +PDFBuilder builder = new PDFBuilder(); + +// Add a heading +builder.addHeading(Heading.builder() + .withText("My Document") + .withLevel(HeadingLevel.H1) + .build()); + +// Add a paragraph +builder.addParagraph(Paragraph.builder() + .addText("Hello, World!") + .withAlignment(TextAlignment.CENTER) + .build()); + +// Save the document +builder.save("output.pdf"); ``` -pdf-builder/ -├── src/ -│ ├── main/java/br/com/nutit/pdfbuilder/ -│ │ ├── components/ -│ │ │ ├── image/ # Componentes de imagem -│ │ │ ├── list/ # Componentes de lista -│ │ │ ├── logo/ # Componentes de logo -│ │ │ ├── page/ # Componentes de página -│ │ │ ├── table/ # Componentes de tabela -│ │ │ └── text/ # Componentes de texto -│ │ ├── core/ # Classes principais -│ │ │ ├── Coordinates.java # Sistema de coordenadas -│ │ │ ├── PDFBuilder.java # Classe principal -│ │ │ ├── PDFConfiguration.java # Configurações -│ │ │ ├── ResourceManager.java # Gerenciamento de recursos -│ │ │ └── SafeArea.java # Áreas seguras -│ │ ├── examples/ # Exemplos de uso -│ │ ├── exceptions/ # Exceções customizadas -│ │ └── utils/ # Classes utilitárias -│ └── test/ # Testes unitários -└── pom.xml # Configuração Maven -``` -## Funcionalidades - -### 1. Configuração do Documento -- Tamanho de página personalizado (A4, A3, etc.) -- Margens personalizadas -- DPI para imagens -- Qualidade de compressão -- Tamanho de fonte e espaçamento padrão -- Área segura com suporte a cabeçalho e rodapé - -### 2. Sistema de Coordenadas -- Movimentação relativa (direita, abaixo) -- Movimentação absoluta (topo, início, fundo) -- Sistema de margens e áreas seguras -- Posicionamento percentual na página - -### 3. Componentes de Texto -- Texto simples com formatação -- Parágrafos com alinhamento -- Títulos e subtítulos (H1-H6) -- Estilos de texto personalizados -- Fontes e cores customizáveis - -### 4. Componentes de Imagem -- Suporte a diversos formatos (JPG, PNG) -- Redimensionamento automático -- Manutenção de proporção -- Alinhamento flexível -- Legendas opcionais - -### 5. Componentes de Lista -- Listas ordenadas e não-ordenadas -- Estilos de marcadores personalizáveis -- Suporte a múltiplos níveis -- Formatação flexível - -### 6. Componentes de Tabela -- Tabelas simples com cabeçalho -- Alinhamento de células -- Estilos de borda personalizáveis -- Cores alternadas para linhas - -### 7. Cabeçalho e Rodapé -- Logo personalizado com imagens -- Numeração de páginas automática -- Rodapé confidencial -- Estilos predefinidos - -## Exemplos de Uso - -### Documento Básico +## Core Components + +### Document Configuration ```java -// Configuração do documento PDFConfiguration config = PDFConfiguration.create() .withPageSize(PDRectangle.A4) .withMargins(50f, 40f, 30f, 40f) @@ -136,93 +65,100 @@ PDFConfiguration config = PDFConfiguration.create() .build(); PDFBuilder builder = new PDFBuilder(config); +``` -// Adiciona título -builder.addHeading(Heading.builder() - .withText("Meu Documento") - .withLevel(HeadingLevel.H1) +### Headers and Footers +```java +// Add company logo +builder.setLogo(Logo.builder() + .withText("Company Name") + .withLeftImage("path/to/logo.png") + .withStyle(LogoStyle.DEFAULT) .build()); -// Adiciona parágrafo -builder.addParagraph(Paragraph.builder() - .addStyledText("Este é um exemplo de parágrafo com ", TextStyle.DEFAULT) - .addStyledText("texto em negrito", TextStyle.builder().withBold(true).build()) +// Add page numbering +builder.setPageNumbering(PageNumbering.builder() + .withFormat("Page {current} of {total}") + .withPosition(Position.BOTTOM_RIGHT) .build()); - -// Salva o documento -builder.save("exemplo.pdf"); ``` -### Logo e Numeração de Páginas +### Tables ```java -// Configuração do logo -LogoStyle logoStyle = LogoStyle.builder() - .withFontSize(16f) - .withColor(Color.BLACK) - .withImageWidth(50f) - .withImageHeight(30f) - .withMaintainAspectRatio(true) - .build(); - -// Configuração da numeração de páginas -PageNumbering pageNumbering = PageNumbering.builder() - .withFormat(PageNumbering.Format.WITH_TOTAL) - .withPosition(PageNumbering.Position.BOTTOM) - .withAlignment(TextAlignment.RIGHT) +Table table = Table.builder() + .withHeaders("Name", "Age", "City") + .addRow("John Doe", "30", "New York") + .addRow("Jane Smith", "25", "London") + .withStyle(TableStyle.builder() + .withBorderWidth(1f) + .withHeaderBackground(Color.LIGHT_GRAY) + .build()) .build(); -// Adiciona logo e numeração -builder.setLogo("Minha Empresa", logoStyle, "logo-left.png", "logo-right.png"); -builder.setPageNumbering(pageNumbering); +builder.addTable(table); ``` -### Tabelas e Listas +### Lists ```java -// Criação de tabela -Table table = Table.builder() - .withHeaders("Nome", "Idade", "Cidade") - .addRow("João", "25", "São Paulo") - .addRow("Maria", "30", "Rio de Janeiro") - .build(); - -// Criação de lista List list = List.builder() .withOrdered(true) - .addItem("Primeiro item") - .addItem("Segundo item") - .addItem("Terceiro item") + .addItem("First item") + .addItem("Second item with nested list", + List.builder() + .withOrdered(false) + .addItem("Nested item 1") + .addItem("Nested item 2") + .build()) .build(); -// Adiciona ao documento -builder.addTable(table); builder.addList(list); ``` -## Development +## Project Structure -For development guidelines, please see [CONTRIBUTING.md](CONTRIBUTING.md). +``` +pdf-builder/ +├── src/ +│ ├── main/java/io/github/joabsonlg/pdfbuilder/ +│ │ ├── components/ # PDF Components +│ │ │ ├── image/ # Image handling +│ │ │ ├── list/ # List components +│ │ │ ├── logo/ # Logo components +│ │ │ ├── page/ # Page components +│ │ │ ├── table/ # Table components +│ │ │ └── text/ # Text components +│ │ ├── core/ # Core classes +│ │ ├── examples/ # Usage examples +│ │ ├── exceptions/ # Custom exceptions +│ │ └── utils/ # Utility classes +│ └── test/ # Unit tests +└── pom.xml # Maven configuration +``` -## Testes +## Quality Assurance -Para executar os testes: +We maintain high code quality standards through: -```bash -mvn clean test -``` +- **Checkstyle**: Enforces Google Java Style Guide +- **SpotBugs**: Static analysis for potential bugs +- **JaCoCo**: Ensures 80%+ code coverage +- **JUnit**: Comprehensive unit testing -## Próximos Passos +## Contributing -- Tabelas complexas com merge de células -- Marcas d'água -- Links e âncoras -- Índice automático -- QR Codes e códigos de barras -- Templates pré-definidos +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/amazing-feature`) +3. Commit your changes (`git commit -m 'feat: add amazing feature'`) +4. Push to the branch (`git push origin feature/amazing-feature`) +5. Open a Pull Request -## Licença +## License -Este projeto está sob a licença [MIT](LICENSE). +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. -## Contribuindo +## Dependencies -Contribuições são bem-vindas! Por favor, leia o guia de contribuição para saber como contribuir com o projeto. +- Apache PDFBox 3.0.1 +- Commons IO 2.15.1 +- SLF4J 2.0.11 +- JUnit Jupiter 5.10.1 (test) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..4cea8b4 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,44 @@ +# Security Policy + +## Supported Versions + +Currently supported versions with security updates: + +| Version | Supported | +| ------- | ------------------ | +| 1.0.x | :white_check_mark: | + +## Reporting a Vulnerability + +We take the security of PDF Builder seriously. If you believe you have found a security vulnerability, please report it to us as described below. + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them via email to joabsonlg918@gmail.com. You should receive a response within 48 hours. If for some reason you do not, please follow up via email to ensure we received your original message. + +Please include the following information in your report: + +- Type of issue (e.g., buffer overflow, SQL injection, cross-site scripting, etc.) +- Full paths of source file(s) related to the manifestation of the issue +- The location of the affected source code (tag/branch/commit or direct URL) +- Any special configuration required to reproduce the issue +- Step-by-step instructions to reproduce the issue +- Proof-of-concept or exploit code (if possible) +- Impact of the issue, including how an attacker might exploit it + +## Preferred Languages + +We prefer all communications to be in English. + +## Security Update Process + +1. The security report will be acknowledged within 48 hours +2. We will confirm the issue and determine its severity +3. We will develop and test a fix +4. We will prepare a security advisory and release timeline +5. We will notify users when a security release is scheduled +6. Once the fix is verified, we will release it according to our release process + +## Comments on this Policy + +If you have suggestions on how this process could be improved, please submit a pull request. diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 6646405..0000000 --- a/TODO.md +++ /dev/null @@ -1,130 +0,0 @@ -# PDF Builder - Roadmap e Arquitetura - -Uma biblioteca Java de alto nível para construção de PDFs, abstraindo toda a complexidade do Apache PDFBox. - -## Objetivos Principais - -- [ ] Criar uma API fluente e intuitiva -- [ ] Abstrair toda complexidade do PDFBox -- [ ] Fornecer componentes pré-construídos para uso comum -- [ ] Garantir extensibilidade para casos específicos -- [ ] Documentação completa e exemplos práticos - -## Tarefas de Desenvolvimento - -### 1. Configuração Inicial -- [x] Setup do projeto Maven/Gradle -- [x] Configuração de dependências (PDFBox, etc) -- [x] Estrutura inicial de pacotes -- [x] Configuração de testes (JUnit) - -### 2. Core da Biblioteca -- [x] Implementar classe principal `PDFBuilder` -- [x] Desenvolver sistema de configuração global -- [x] Criar sistema de gestão de recursos (fontes, imagens) -- [x] Implementar sistema de coordenadas simplificado -- [x] Desenvolver sistema de margens e áreas seguras - -### 3. Componentes Básicos -- [x] Texto simples com formatação -- [x] Parágrafos com alinhamento -- [x] Títulos e subtítulos -- [x] Imagens com redimensionamento -- [x] Tabelas simples -- [x] Listas (ordenadas e não ordenadas) - -### 4. Componentes Avançados -- [x] Numeração de páginas -- [x] Cabeçalhos e rodapés automáticos -- [ ] Tabelas complexas com merge de células -- [ ] Marcas d'água -- [ ] Links e âncoras -- [ ] Índice automático -- [ ] QR Codes e códigos de barras - -### 5. Layout e Estilos -- [ ] Sistema de estilos reutilizáveis -- [ ] Templates pré-definidos -- [ ] Temas customizáveis -- [ ] Grids e sistemas de layout -- [ ] Quebras de página inteligentes - -### 6. Recursos Avançados -- [ ] Suporte a formulários -- [ ] Assinatura digital -- [ ] Criptografia de documentos -- [ ] Compressão otimizada -- [ ] Metadados customizados -- [ ] Suporte a múltiplos idiomas - -### 7. Otimização e Performance -- [ ] Cache de recursos -- [ ] Otimização de memória -- [ ] Geração assíncrona -- [ ] Streaming de documentos grandes - -### 8. Documentação e Exemplos -- [ ] JavaDoc completo -- [ ] Guia de início rápido -- [ ] Documentação detalhada -- [ ] Exemplos práticos -- [ ] Snippets de código -- [ ] Tutoriais em vídeo - -## Arquitetura Proposta - -``` -com.pdfbuilder/ -├── core/ -│ ├── PDFBuilder.java # Classe principal -│ ├── PDFDocument.java # Representação do documento -│ └── config/ # Configurações globais -├── components/ -│ ├── text/ # Componentes de texto -│ ├── image/ # Componentes de imagem -│ ├── table/ # Componentes de tabela -│ └── layout/ # Componentes de layout -├── style/ -│ ├── Theme.java # Sistema de temas -│ └── Style.java # Estilos reutilizáveis -├── utils/ -│ ├── FontManager.java # Gestão de fontes -│ ├── ImageUtils.java # Utilidades de imagem -│ └── ColorUtils.java # Utilidades de cor -└── exceptions/ # Exceções customizadas -``` - -## Padrões de Design a Serem Utilizados - -- [ ] Builder Pattern para construção fluente -- [ ] Factory Method para criação de componentes -- [ ] Strategy para diferentes tipos de renderização -- [ ] Template Method para comportamentos padrão -- [ ] Chain of Responsibility para processamento de elementos -- [ ] Observer para eventos de renderização -- [ ] Composite para estrutura de elementos - -## Considerações Técnicas - -### Requisitos Mínimos -- Java 17+ -- Apache PDFBox 3.0+ -- Memória suficiente para processamento de PDFs grandes - -### Dependências Principais -- Apache PDFBox -- Commons IO -- SLF4J (logging) -- JUnit (testes) - -### Compatibilidade -- [ ] Garantir funcionamento em Windows, Linux e MacOS -- [ ] Suporte a containers Docker -- [ ] Compatibilidade com principais servidores de aplicação - -## Métricas de Qualidade - -- [ ] Cobertura de testes > 80% -- [ ] Documentação completa de todas as classes públicas -- [ ] Zero vulnerabilidades críticas -- [ ] Performance otimizada para documentos grandes