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)
240 lines
3.8 KiB
Markdown
240 lines
3.8 KiB
Markdown
# 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
|
|
``` |