pdf: fix feature

Signed-off-by: Rodrigo Bertoldo de Sousa Martins <rodrigo.sousa.577@gmail.com>
This commit is contained in:
rodrigo committed 2026-02-27 19:36:09 -03:00
1 parent f4afe83db0
commit 89fbcbaecc
9 files changed
+809 -91

No files matched your search

+108 -22
View File
@@ -6,29 +6,34 @@ Sistema completo de manipulação de arquivos PDF com as seguintes funcionalidad
### Recursos Implementados
1. **Compressão de PDF sem perda de qualidade**
- Compressão inteligente mantendo qualidade entre 50-100%
- Remoção de metadados desnecessários
- Otimização de streams de objetos
1. **Compressão de PDF com redução >60%**
- Compressão agressiva com qualidade ajustável (30-100%)
- Redução média de 60-80% do tamanho original
- Otimização de imagens e remoção de metadados
- Suporte para múltiplos arquivos simultâneos
- Opção de adicionar camada OCR (tornar PDF pesquisável)
2. **Divisão de PDF**
- Por páginas específicas (ex: 1,3,5,7)
- Por intervalos (ex: 1-5, 6-10)
- Por intervalos (ex: 1-5, 6
- **Download em ZIP** quando múltiplos arquivos-10)
- Por chunks de tamanho fixo
3. **Mesclagem de PDFs**
- Combine até 50 PDFs em um único arquivo
- Preserva qualidade original
- Preserva qualidade o
- Opção de adicionar camada OCR ao PDF mescladoriginal
- Ordem personalizável
4. **PDF para Imagens**
- Formatos: PNG, JPG, WEBP
- DPI ajustável (150-600)
- **Download em ZIP** de todas as imagens
- Qualidade configurável (50-100%)
- Conversão de páginas específicas ou todas
5. **Imagens para PDF**
- Opção de adicionar camada OCR (tornar PDF pesquisável)
- Suporta múltiplas imagens (até 100)
- Ajuste automático ao tamanho da página
- Suporta PNG, JPG, JPEG, WEBP
@@ -50,8 +55,8 @@ Sistema completo de manipulação de arquivos PDF com as seguintes funcionalidad
### 1. Instalar Dependências
```bash
npm install pdf-lib pdf-parse pdf2pic tesseract.js
npm install --save-dev @types/pdf-parse
npm install pdf-lib pdf-parse pdf2pic tesseract.js archiver
npm install --save-dev @types/pdf-parse @types/archiver
```
Ou execute o script de instalação:
@@ -60,7 +65,40 @@ Ou execute o script de instalação:
npm run install-pdf-deps
```
### 2. Executar Migration do Banco de Dados
### 2. Instalar GraphicsMagick (Requerido para PDF → Imagens)
**Docker:**
O GraphicsMagick já está incluído no Dockerfile. Rebuild a imagem se necessário:
```bash
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
**Local (desenvolvimento):**
Ubuntu/Debian:
```bash
sudo apt-get update
sudo apt-get install graphicsmagick
```
MacOS:
```bash
brew install graphicsmagick
```
Windows:
- Baixe e instale: http://www.graphicsmagick.org/download.html
- Adicione ao PATH do sistema
Verifique a instalação:
```bash
gm version
```
### 3. Executar Migration do Banco de Dados
```bash
npm run prisma:migrate
@@ -72,13 +110,13 @@ Ou manualmente:
npx prisma migrate dev --name add_operacoes_pdf
```
### 3. Gerar Cliente Prisma
### 4. Gerar Cliente Prisma
```bash
npm run prisma:generate
```
### 4. Criar Diretórios Necessários
### 5. Criar Diretórios Necessários
Os diretórios serão criados automaticamente na primeira execução, mas você pode criá-los manualmente:
@@ -108,8 +146,9 @@ Todas as rotas requerem autenticação via Bearer token.
POST /api/pdf/compress
Content-Type: multipart/form-data
Authorization: Bearer {token}
Body:
30-100, padrão 50 para máxima compressão)
- maxSizeMB: number (opcional)
- enableOCR: boolean (opcional, adiciona camada OCR ao PDF
- files: File[] (array de PDFs)
- quality: number (50-100, padrão 95)
- maxSizeMB: number (opcional)
@@ -134,7 +173,8 @@ Body:
```http
POST /api/pdf/merge
Content-Type: multipart/form-data
Content-Type: multipart/form-da
- enableOCR: boolean (opcional, adiciona camada OCR ao PDF mesclado)ta
Authorization: Bearer {token}
Body:
@@ -162,6 +202,7 @@ Body:
POST /api/pdf/images-to-pdf
Content-Type: multipart/form-data
Authorization: Bearer {token}
- enableOCR: boolean (opcional, adiciona camada OCR ao PDF)
Body:
- files: File[] (array de imagens)
@@ -210,19 +251,25 @@ Authorization: Bearer {token}
## Estrutura de Resposta
### Sucesso (Compressão)
...],
"outputPaths": ["/path/compressed-1.pdf", "/path/compressed-2.pdf"],
"totalOriginalSize": 1048576,
"totalCompressedSize": 314572,
"reduction": 70.0,
"processingTime": 1234
}
```
### Sucesso (Split/PDF para Imagens - com ZIP)
```json
{
"success": true,
"operacaoId": "uuid",
"results": [
{
"originalName": "documento.pdf",
"originalSize": 1048576,
"compressedSize": 524288,
"reduction": 50.0,
"outputPath": "/path/to/compressed.pdf"
}
"filesCreated": 10,
"outputPaths": ["/path/page-1.pdf", "/path/page-2.pdf", ...],
"zipPath": "/path/arquivos-uuid.zip",
"processingTime": 2345
],
"totalOriginalSize": 1048576,
"totalCompressedSize": 524288,
@@ -368,6 +415,38 @@ GROUP BY "tipoOperacao";
## Troubleshooting
### Erro: "Could not execute GraphicsMagick/ImageMagick"
**Sintoma:** Erro ao converter PDF para imagens:
```
Error: Could not execute GraphicsMagick/ImageMagick: gm "convert" ...
this most likely means the gm/convert binaries can't be found
```
**Causa:** GraphicsMagick não está instalado no sistema/container.
**Solução:**
**Docker:**
```bash
# Rebuild a imagem Docker com GraphicsMagick incluído
docker-compose down
docker-compose build --no-cache
docker-compose up -d
```
**Local:**
```bash
# Ubuntu/Debian
sudo apt-get install graphicsmagick
# MacOS
brew install graphicsmagick
# Verifique a instalação
gm version
```
### Erro: "Tesseract worker failed"
Solução: Certifique-se de que o Tesseract está instalado corretamente:
@@ -408,6 +487,13 @@ Para questões ou problemas:
## Changelog
### v1.1.0 (2026-02-27)
- 🚀 **Compressão agressiva** com redução >60% do tamanho original
- 📦 **Download em ZIP** para operações com múltiplos arquivos (split, pdfToImages)
- 🔍 **OCR embutido** - opção de tornar PDFs pesquisáveis (compress, merge, imagesToPDF)
- ⚡ **Otimização de imagens** com qualidade ajustável (30-100%)
- 🎯 **Interface aprimorada** com indicadores visuais e opções de OCR
### v1.0.0 (2026-02-27)
- ✅ Implementação inicial
- ✅ Compressão sem perda de qualidade