|
| 1 | +# PDF-Lib - Propostas de Melhorias |
| 2 | + |
| 3 | +Este documento foi gerado a partir da análise dos forks mais populares do pdf-lib e dos Pull Requests pendentes no repositório original. |
| 4 | + |
| 5 | +## Resumo da Análise |
| 6 | + |
| 7 | +### Forks Analisados |
| 8 | +| Fork | Stars | Principais Melhorias | |
| 9 | +|------|-------|---------------------| |
| 10 | +| [pdfme/pdf-lib](https://github.com/pdfme/pdf-lib) | 26 | Retângulos arredondados, SVG melhorado, compatibilidade fontkit v2 | |
| 11 | +| [cantoo-scribe/pdf-lib](https://github.com/cantoo-scribe/pdf-lib) | 304 | Suporte completo a SVG | |
| 12 | +| [remdra/pdf-lib-incremental-save](https://github.com/remdra/pdf-lib-incremental-save) | 11 | Salvamento incremental para assinaturas | |
| 13 | +| [brennanmcquerry/pdf-lib-plus-encrypt](https://github.com/brennanmcquerry/pdf-lib-plus-encrypt) | 6 | Criptografia de PDFs | |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +## TODO - Melhorias Prioritárias |
| 18 | + |
| 19 | +### 1. ALTA PRIORIDADE - Funcionalidades Críticas |
| 20 | + |
| 21 | +#### 1.1 Suporte a Criptografia/Descriptografia de PDFs |
| 22 | +- **Origem**: Fork `pdf-lib-plus-encrypt` + Issue #1326 |
| 23 | +- **Descrição**: Adicionar capacidade de abrir e salvar PDFs protegidos por senha |
| 24 | +- **Benefícios**: |
| 25 | + - Manipular PDFs criptografados sem erros |
| 26 | + - Criar PDFs com proteção por senha |
| 27 | + - Diferenciar entre senha de abertura e senha de permissões |
| 28 | +- **Arquivos a modificar**: |
| 29 | + - `src/api/PDFDocument.ts` - Adicionar opções de criptografia |
| 30 | + - `src/core/` - Criar módulo de criptografia (RC4, AES) |
| 31 | + |
| 32 | +#### 1.2 Suporte a SVG |
| 33 | +- **Origem**: Fork `cantoo-scribe/pdf-lib` |
| 34 | +- **Descrição**: Implementar métodos `drawSvg()` e `drawSvgPath()` |
| 35 | +- **Benefícios**: |
| 36 | + - Desenhar gráficos vetoriais complexos |
| 37 | + - Importar ícones e logos em SVG |
| 38 | + - Melhor qualidade visual em qualquer escala |
| 39 | +- **Arquivos a modificar**: |
| 40 | + - `src/api/PDFPage.ts` - Adicionar métodos drawSvg |
| 41 | + - `src/api/operations.ts` - Operações de renderização SVG |
| 42 | + - Criar `src/utils/svg.ts` - Parser de SVG para operações PDF |
| 43 | + |
| 44 | +#### 1.3 Salvamento Incremental |
| 45 | +- **Origem**: Fork `remdra/pdf-lib-incremental-save` |
| 46 | +- **Descrição**: Permitir salvar apenas as modificações, preservando o documento original |
| 47 | +- **Benefícios**: |
| 48 | + - Essencial para assinaturas digitais |
| 49 | + - Preserva trilha de auditoria |
| 50 | + - Mais eficiente para arquivos grandes |
| 51 | +- **API proposta**: |
| 52 | + ```typescript |
| 53 | + await pdfDoc.takeSnapshot(); |
| 54 | + await pdfDoc.markRefForSave(pageRef); |
| 55 | + const incrementalBytes = await pdfDoc.saveIncremental(snapshot); |
| 56 | + ``` |
| 57 | +- **Arquivos a modificar**: |
| 58 | + - `src/api/PDFDocument.ts` - Novos métodos |
| 59 | + - `src/core/writers/PDFWriter.ts` - Lógica de escrita incremental |
| 60 | + |
| 61 | +--- |
| 62 | + |
| 63 | +### 2. MÉDIA PRIORIDADE - Melhorias de Funcionalidade |
| 64 | + |
| 65 | +#### 2.1 Retângulos com Cantos Arredondados |
| 66 | +- **Origem**: Fork `pdfme/pdf-lib` |
| 67 | +- **Descrição**: Adicionar opção `radius` ao método `drawRectangle()` |
| 68 | +- **Benefícios**: Elementos visuais mais modernos |
| 69 | +- **Implementação**: Usar curvas de Bezier para os cantos |
| 70 | +- **Arquivos a modificar**: |
| 71 | + - `src/api/PDFPage.ts` - Método drawRectangle |
| 72 | + - `src/api/operations.ts` - Operação drawRectangle |
| 73 | + |
| 74 | +#### 2.2 Suporte a Hyperlinks |
| 75 | +- **Origem**: PR #1691 |
| 76 | +- **Descrição**: Adicionar links clicáveis em PDFs |
| 77 | +- **Benefícios**: PDFs interativos com navegação |
| 78 | +- **Arquivos a modificar**: |
| 79 | + - `src/api/PDFPage.ts` - Método para criar links |
| 80 | + - `src/core/annotation/` - Anotações de link |
| 81 | + |
| 82 | +#### 2.3 Renomear Campos de Formulário |
| 83 | +- **Origem**: PR #1748 |
| 84 | +- **Descrição**: Permitir renomear campos AcroForm existentes |
| 85 | +- **Benefícios**: Maior flexibilidade na manipulação de formulários |
| 86 | +- **Arquivos a modificar**: |
| 87 | + - `src/api/form/PDFField.ts` - Método rename |
| 88 | + |
| 89 | +#### 2.4 Função de Translação de Página |
| 90 | +- **Origem**: PR #1379 |
| 91 | +- **Descrição**: Mover/transladar conteúdo de página |
| 92 | +- **Benefícios**: Reposicionamento de conteúdo existente |
| 93 | +- **Arquivos a modificar**: |
| 94 | + - `src/api/PDFPage.ts` - Método translate |
| 95 | + |
| 96 | +#### 2.5 Flatten Parcial de Formulários |
| 97 | +- **Origem**: PR #1758 |
| 98 | +- **Descrição**: Flatten apenas campos específicos, não todos |
| 99 | +- **Benefícios**: Controle granular sobre campos de formulário |
| 100 | +- **Arquivos a modificar**: |
| 101 | + - `src/api/form/PDFForm.ts` - Opções de flatten seletivo |
| 102 | + |
| 103 | +--- |
| 104 | + |
| 105 | +### 3. BAIXA PRIORIDADE - Melhorias de Qualidade |
| 106 | + |
| 107 | +#### 3.1 Integração OSS-Fuzz |
| 108 | +- **Origem**: PR #1768 |
| 109 | +- **Descrição**: Adicionar testes de fuzzing para segurança |
| 110 | +- **Benefícios**: Identificar vulnerabilidades de parsing |
| 111 | + |
| 112 | +#### 3.2 PageSizes Imutáveis |
| 113 | +- **Origem**: PR #1765 |
| 114 | +- **Descrição**: Tornar definições de tamanho de página literais e imutáveis |
| 115 | +- **Benefícios**: Melhor type-safety em TypeScript |
| 116 | + |
| 117 | +#### 3.3 Preservar Ordem de Objetos |
| 118 | +- **Origem**: PR #1769 |
| 119 | +- **Descrição**: Manter ordem de objetos em PDFs com atualizações incrementais |
| 120 | +- **Benefícios**: Compatibilidade com assinaturas digitais |
| 121 | + |
| 122 | +#### 3.4 Manter Versão do PDF |
| 123 | +- **Origem**: PR #1747 |
| 124 | +- **Descrição**: Preservar versão original do PDF ao salvar |
| 125 | +- **Benefícios**: Evitar problemas de compatibilidade |
| 126 | + |
| 127 | +#### 3.5 Metadata Producer |
| 128 | +- **Origem**: PR #1761 |
| 129 | +- **Descrição**: Definir metadata de produtor automaticamente |
| 130 | +- **Benefícios**: Rastreabilidade de documentos gerados |
| 131 | + |
| 132 | +--- |
| 133 | + |
| 134 | +### 4. CORREÇÕES DE BUGS IMPORTANTES |
| 135 | + |
| 136 | +#### 4.1 Corrupção Visual em PDFs |
| 137 | +- **Origem**: PR #1772, Issue #951 |
| 138 | +- **Descrição**: Resolver problemas de renderização visual |
| 139 | + |
| 140 | +#### 4.2 Encoding WinAnsi para Texto Não-Latino |
| 141 | +- **Origem**: Issue #1152 |
| 142 | +- **Descrição**: Suportar caracteres não-latinos em dropdowns |
| 143 | +- **Solução**: Usar encoding UTF-16 ou Unicode adequado |
| 144 | + |
| 145 | +#### 4.3 Compatibilidade com Fontkit v2 |
| 146 | +- **Origem**: Fork `pdfme/pdf-lib` |
| 147 | +- **Descrição**: Resolver corrupção de caracteres japoneses/chineses em subsets de fontes |
| 148 | + |
| 149 | +#### 4.4 Validação NaN |
| 150 | +- **Origem**: PR #1722 |
| 151 | +- **Descrição**: Corrigir problemas de validação com valores NaN |
| 152 | + |
| 153 | +#### 4.5 Valores de Checkbox |
| 154 | +- **Origem**: PR #1685 |
| 155 | +- **Descrição**: Melhorar manipulação de valores de checkbox |
| 156 | + |
| 157 | +--- |
| 158 | + |
| 159 | +### 5. FUNCIONALIDADES SOLICITADAS (Longo Prazo) |
| 160 | + |
| 161 | +#### 5.1 Extração de Texto |
| 162 | +- **Origem**: Issues #93, #137, #177, #329, #380 |
| 163 | +- **Descrição**: Extrair texto plano de páginas PDF |
| 164 | +- **Complexidade**: ALTA - Requer parsing de content streams |
| 165 | + |
| 166 | +#### 5.2 Edição de Texto Existente |
| 167 | +- **Origem**: Issues #93, #137, #177, #329, #380 |
| 168 | +- **Descrição**: Modificar texto existente em páginas |
| 169 | +- **Complexidade**: MUITO ALTA - Requer reconstrução de content streams |
| 170 | + |
| 171 | +#### 5.3 Suporte a Spot Colors |
| 172 | +- **Origem**: Issue #444 |
| 173 | +- **Descrição**: Suportar cores especiais (Pantone, etc.) |
| 174 | +- **Complexidade**: MÉDIA |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +## Roadmap Sugerido |
| 179 | + |
| 180 | +### Fase 1 - Fundação (Semanas 1-4) |
| 181 | +- [ ] Implementar suporte a SVG (`drawSvgPath`, `drawSvg`) |
| 182 | +- [ ] Adicionar retângulos arredondados |
| 183 | +- [ ] Integrar correções de bugs críticos (PR #1772) |
| 184 | + |
| 185 | +### Fase 2 - Funcionalidades Core (Semanas 5-8) |
| 186 | +- [ ] Implementar salvamento incremental |
| 187 | +- [ ] Adicionar suporte a hyperlinks |
| 188 | +- [ ] Implementar flatten parcial de formulários |
| 189 | + |
| 190 | +### Fase 3 - Segurança (Semanas 9-12) |
| 191 | +- [ ] Adicionar suporte a criptografia/descriptografia |
| 192 | +- [ ] Integrar OSS-Fuzz para testes de segurança |
| 193 | +- [ ] Melhorar validação de entrada |
| 194 | + |
| 195 | +### Fase 4 - Polimento (Semanas 13-16) |
| 196 | +- [ ] Compatibilidade com fontkit v2 |
| 197 | +- [ ] Melhorias de encoding para i18n |
| 198 | +- [ ] Documentação e exemplos |
| 199 | + |
| 200 | +--- |
| 201 | + |
| 202 | +## Referências |
| 203 | + |
| 204 | +### Forks Principais |
| 205 | +- https://github.com/cantoo-scribe/pdf-lib |
| 206 | +- https://github.com/pdfme/pdf-lib |
| 207 | +- https://github.com/remdra/pdf-lib-incremental-save |
| 208 | +- https://github.com/brennanmcquerry/pdf-lib-plus-encrypt |
| 209 | + |
| 210 | +### PRs Relevantes |
| 211 | +- https://github.com/Hopding/pdf-lib/pull/1772 - Fix visual corruption |
| 212 | +- https://github.com/Hopding/pdf-lib/pull/1768 - OSS-Fuzz |
| 213 | +- https://github.com/Hopding/pdf-lib/pull/1691 - Hyperlinks |
| 214 | +- https://github.com/Hopding/pdf-lib/pull/1748 - Rename form fields |
| 215 | +- https://github.com/Hopding/pdf-lib/pull/1758 - Partial flatten |
| 216 | + |
| 217 | +### Discussões |
| 218 | +- https://github.com/Hopding/pdf-lib/discussions/1631 - Future of pdf-lib |
| 219 | + |
| 220 | +--- |
| 221 | + |
| 222 | +*Documento gerado em 2026-01-31 a partir da análise de forks e PRs do repositório pdf-lib* |
0 commit comments