feat: initial release — pdf-toolkit v1.0.0

Core operations:
- Compress PDF (3 presets: screen, ebook, printer, prepress)
- PDF/A detection and conversion to regular PDF
- Compress while preserving PDF/A structure
- Merge multiple PDFs
- Split/extract pages by range
- Rotate pages
- Extract text and images

Interface:
- Streamlit web GUI (app.py)
- FastAPI REST API with auto OpenAPI docs (api.py)

Docs:
- README.md, ARCHITECTURE.md, API.md
- Unit tests (15/15 passing)
This commit is contained in:
CM Consultor
2026-08-09 02:15:22 +00:00
commit 84d4a1eab5
17 changed files with 1998 additions and 0 deletions

240
docs/API.md Normal file
View File

@@ -0,0 +1,240 @@
# API do pdf-toolkit
Documentação interativa disponível em:
- **Swagger UI**: http://localhost:8555/docs
- **Redoc**: http://localhost:8555/redoc
---
## Base URL
```
http://localhost:8555
```
---
## Endpoints
### `GET /`
Raiz informativa.
**Resposta:**
```json
{
"app": "pdf-toolkit API",
"version": "1.0.0",
"docs": "/docs",
"redoc": "/redoc"
}
```
---
### `GET /health`
Health check.
**Resposta:**
```json
{"status": "ok", "version": "1.0.0"}
```
---
### `POST /inspect`
Inspeciona metadados de um PDF.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
**Resposta:**
```json
{
"valid": true,
"pages": 42,
"error": "",
"is_pdfa": false,
"file_size_mb": 2.34,
"filename": "relatorio.pdf",
"level": null,
"method": "none",
"confidence": 0.0
}
```
---
### `POST /compress`
Comprime um PDF re-amostrando imagens.
**Parâmetros:**
| Nome | Tipo | Padrão | Obrigatório |
|---|---|---|---|
| `file` | arquivo | — | ✅ |
| `preset` | string | `"ebook"` | ❌ |
**Presets válidos:** `screen`, `ebook`, `printer`, `prepress`
**Resposta:** PDF comprimido (download)
---
### `POST /pdfa-to-regular`
Remove restrições PDF/A gerando PDF comum.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
**Resposta:** PDF comum (download)
---
### `POST /compress-pdfa`
Comprime imagens mantendo a estrutura PDF/A.
**Parâmetros:**
| Nome | Tipo | Padrão | Obrigatório |
|---|---|---|---|
| `file` | arquivo | — | ✅ |
| `quality` | int (10-100) | 60 | ❌ |
**Resposta:** PDF otimizado (download)
---
### `POST /merge`
Junta múltiplos PDFs em um único arquivo.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `files` | lista de arquivos | ✅ (mín: 2) |
**Resposta:** PDF mesclado (download)
---
### `POST /split`
Divide um PDF em múltiplos arquivos por intervalos de páginas.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
| `ranges` | string | ✅ |
**Exemplo de `ranges`:** `"1-3,5,7-9"` (1-indexado)
**Resposta:** ZIP com os PDFs extraídos
---
### `POST /extract-pages`
Extrai páginas específicas em ordem para um único PDF.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
| `pages` | string | ✅ |
**Exemplo de `pages`:** `"1,3,5"` (1-indexado)
**Resposta:** PDF com as páginas selecionadas (download)
---
### `POST /rotate`
Rotaciona páginas de um PDF.
**Parâmetros:**
| Nome | Tipo | Padrão | Obrigatório |
|---|---|---|---|
| `file` | arquivo | — | ✅ |
| `pages` | string | — | ✅ |
| `angle` | int | 90 | ❌ |
**Exemplo de `pages`:** `"1,3,5"` ou `"todas"`
**Resposta:** PDF rotacionado (download)
---
### `POST /extract-text`
Extrai texto de todas as páginas do PDF.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
**Resposta:** arquivo `.txt` (download)
---
### `POST /extract-images`
Extrai todas as imagens embutidas no PDF.
**Parâmetros:**
| Nome | Tipo | Obrigatório |
|---|---|---|
| `file` | arquivo PDF | ✅ |
**Resposta:** ZIP com as imagens extraídas
---
## Exemplos com curl
### Comprimir
```bash
curl -X POST http://localhost:8555/compress \
-F "file=@documento.pdf" \
-F "preset=ebook" \
-o comprimido.pdf
```
### Merge
```bash
curl -X POST http://localhost:8555/merge \
-F "files=@parte1.pdf" \
-F "files=@parte2.pdf" \
-o merged.pdf
```
### Split
```bash
curl -X POST http://localhost:8555/split \
-F "file=@documento.pdf" \
-F "ranges=1-3,5,7-9" \
-o split.zip
```
### Inspect
```bash
curl -s -X POST http://localhost:8555/inspect \
-F "file=@documento.pdf" | jq .
```
### Extract text
```bash
curl -X POST http://localhost:8555/extract-text \
-F "file=@documento.pdf" \
-o texto.txt
```