146 lines
2.9 KiB
Markdown
146 lines
2.9 KiB
Markdown
|
|
# 🗜️ PDF Compression для n8n
|
|||
|
|
|
|||
|
|
## ⚠️ UPDATE: Stirling API недоступен!
|
|||
|
|
|
|||
|
|
**Альтернатива:** Используем **Ghostscript** или **Python pypdf**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🐍 Вариант 1: Python Code Node (РЕКОМЕНДУЕТСЯ)
|
|||
|
|
|
|||
|
|
### 1️⃣ Базовая настройка
|
|||
|
|
|
|||
|
|
**Method:** `POST`
|
|||
|
|
**URL:** `https://stirling.klientprav.tech/api/v1/general/compress-pdf`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2️⃣ Authentication
|
|||
|
|
|
|||
|
|
- **Type:** `Header Auth`
|
|||
|
|
- **Name:** `X-API-Key`
|
|||
|
|
- **Value:** `HTYgGMCZ64rlzoRbbmg6IeutXzJHEdVpKV1`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3️⃣ Body
|
|||
|
|
|
|||
|
|
**Content Type:** `Multipart-Form Data`
|
|||
|
|
|
|||
|
|
### Fields:
|
|||
|
|
|
|||
|
|
| Property Name | Type | Value |
|
|||
|
|
|--------------|------|-------|
|
|||
|
|
| `fileInput` | Binary Data | `{{ $binary.data }}` |
|
|||
|
|
| `optimizeLevel` | String | `3` |
|
|||
|
|
| `expectedOutputSize` | String | `2` |
|
|||
|
|
|
|||
|
|
**Схема:**
|
|||
|
|
```json
|
|||
|
|
[
|
|||
|
|
{
|
|||
|
|
"name": "fileInput",
|
|||
|
|
"data": "{{ $binary.data }}"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "optimizeLevel",
|
|||
|
|
"data": "3"
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"name": "expectedOutputSize",
|
|||
|
|
"data": "2"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4️⃣ Send Binary Data
|
|||
|
|
|
|||
|
|
**Include Binary Data:** `Yes`
|
|||
|
|
**Binary Property Name:** `data`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📥 Response
|
|||
|
|
|
|||
|
|
Stirling вернёт **сжатый PDF** в формате:
|
|||
|
|
|
|||
|
|
### Success:
|
|||
|
|
- **Status:** `200 OK`
|
|||
|
|
- **Body:** Binary PDF file
|
|||
|
|
- **Headers:**
|
|||
|
|
```
|
|||
|
|
Content-Type: application/pdf
|
|||
|
|
Content-Disposition: attachment; filename="compressed.pdf"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Error:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"message": "Error description",
|
|||
|
|
"status": 400
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔗 Использование в workflow
|
|||
|
|
|
|||
|
|
### Полная цепочка:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Webhook (получили PDF)
|
|||
|
|
↓
|
|||
|
|
IF Node: file_size > 5 MB?
|
|||
|
|
├─ TRUE → HTTP Request (Stirling Compress)
|
|||
|
|
│ ↓
|
|||
|
|
│ Binary Data (сжатый PDF)
|
|||
|
|
│ ↓
|
|||
|
|
└─ FALSE → Binary Data (оригинал)
|
|||
|
|
↓
|
|||
|
|
S3 Upload (оба варианта)
|
|||
|
|
↓
|
|||
|
|
PostgreSQL (запись пути)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Curl пример для теста
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl -X POST \
|
|||
|
|
-H "X-API-Key: HTYgGMCZ64rlzoRbbmg6IeutXzJHEdVpKV1" \
|
|||
|
|
-F "fileInput=@/path/to/file.pdf" \
|
|||
|
|
-F "optimizeLevel=3" \
|
|||
|
|
-F "expectedOutputSize=2" \
|
|||
|
|
https://stirling.klientprav.tech/api/v1/general/compress-pdf \
|
|||
|
|
--output compressed.pdf
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ Параметры сжатия
|
|||
|
|
|
|||
|
|
- **optimizeLevel:**
|
|||
|
|
- `1` = минимальное сжатие (быстро)
|
|||
|
|
- `2` = среднее сжатие (баланс)
|
|||
|
|
- `3` = максимальное сжатие (медленно, но эффективно) ⭐
|
|||
|
|
|
|||
|
|
- **expectedOutputSize:**
|
|||
|
|
- Целевой размер в MB (опционально)
|
|||
|
|
- Например: `2` = максимум 2MB
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 Примечания
|
|||
|
|
|
|||
|
|
⚠️ **Важно:**
|
|||
|
|
1. Stirling работает только с **PDF**
|
|||
|
|
2. JPEG/PNG сначала конвертируются в PDF на **frontend**
|
|||
|
|
3. В n8n приходит уже **PDF**
|
|||
|
|
4. Если файл > 5MB → **сжимаем в Stirling**
|
|||
|
|
5. Если файл ≤ 5MB → **пропускаем Stirling**
|
|||
|
|
|
|||
|
|
---
|