# ✅ Рабочее решение: Обработка данных о рейсах → PDF ## Структура Workflow ``` [Входные данные: FlightAware + FlightRadar24] ↓ [Code: причесываем данные] ← Генерирует HTML и конвертирует в base64 ↓ [HTTP Request: Browserless PDF] ← Конвертирует HTML в PDF через браузер ↓ [Результат: PDF binary] ``` --- ## Нода 1: Code - "причесываем данные" **Тип:** Code (JavaScript) **Код:** См. файл `N8N_FLIGHTS_TO_BASE64.js` **Что делает:** 1. Извлекает данные из структуры `[{ data: [{ body: { flights: [...] }}, { body: { data: [...] }}] }]` 2. Объединяет рейсы по `registration` (номер самолёта) 3. Генерирует красивый HTML с CSS 4. Конвертирует HTML в base64 **Выходные данные:** ```json { "html_base64": "PCFET0NUWVBFIGh0bWw+...", "html": "...", "flights_count": 2, "sources": { "flightaware": { "available": true, "count": 2 }, "flightradar24": { "available": true, "count": 2 } }, "generated_at": "2026-01-16T07:23:00.000Z" } ``` --- ## Нода 2: HTTP Request - "Browserless PDF" **Тип:** HTTP Request **Настройки:** - **Method:** `POST` - **URL:** `http://147.45.146.17:3000/pdf?token=9ahhnpjkchxtcho9` - **Send Body:** ✅ Да - **Specify Body:** `JSON` - **JSON Body:** ```json { "url": "data:text/html;base64, {{ $json.html_base64 }}", "options": { "format": "A4", "printBackground": true, "margin": { "top": "20mm", "right": "15mm", "bottom": "20mm", "left": "20mm" } } } ``` **Response Format:** `Binary` (или `JSON`, если Browserless возвращает JSON) --- ## Результат HTTP Request нода вернёт PDF в binary формате, который можно: - Сохранить в файл - Отправить по email - Загрузить в S3/Nextcloud - Конвертировать в base64 для API response --- ## Конвертация Binary PDF → Base64 (опционально) Если нужен base64 PDF, добавьте Code Node после HTTP Request: ```javascript const pdfBinary = $binary.data; const base64 = Buffer.isBuffer(pdfBinary) ? pdfBinary.toString('base64') : Buffer.from(pdfBinary).toString('base64'); const sizeBytes = Buffer.from(base64, 'base64').length; return [{ json: { pdf_base64: base64, pdf_size_bytes: sizeBytes, pdf_size_mb: (sizeBytes / (1024 * 1024)).toFixed(2), success: true } }]; ``` --- ## Преимущества решения ✅ **Простота** - всего 2 ноды ✅ **Надёжность** - Browserless использует реальный браузер ✅ **Качество** - PDF с правильным форматированием и стилями ✅ **Гибкость** - можно легко изменить параметры PDF (формат, отступы) --- ## Отладка Если что-то не работает: 1. **Проверьте HTML** - в Code Node добавьте: ```javascript console.log('HTML length:', html.length); console.log('HTML preview:', html.substring(0, 200)); ``` 2. **Проверьте base64** - в Code Node добавьте: ```javascript console.log('Base64 length:', htmlBase64.length); ``` 3. **Проверьте ответ Browserless** - в HTTP Request включите "Always Output Data" и проверьте ответ --- ## Готово! 🎉 Workflow работает и генерирует красивые PDF отчёты о рейсах!