// ============================================================================ // n8n Code Node: HTML → PDF через Browserless // ============================================================================ // Используйте этот код ПОСЛЕ ноды, которая вернула HTML или html_base64 // Подготавливает запрос для HTTP Request ноды к Browserless // ============================================================================ // Получаем HTML из предыдущей ноды let html = null; // Вариант 1: HTML уже есть в json.html if ($json.html) { html = $json.html; } // Вариант 2: HTML в base64 else if ($json.html_base64) { html = Buffer.from($json.html_base64, 'base64').toString('utf8'); } // Вариант 3: HTML в другом поле else if ($json.body?.html) { html = $json.body.html; } // Вариант 4: Пытаемся получить из binary else if ($binary && $binary.data) { html = $binary.data.toString('utf8'); } else { throw new Error('HTML не найден. Проверьте, что предыдущая нода вернула html или html_base64'); } console.log('📄 HTML получен, длина:', html.length); // ================== НАСТРОЙКИ BROWSERLESS ================== const BROWSERLESS_URL = 'http://147.45.146.17:3000'; const BROWSERLESS_TOKEN = 'YOUR_TOKEN'; // ⚠️ ЗАМЕНИТЕ на ваш токен Browserless // ================== ВАРИАНТ 1: Использование data URL ================== // Browserless может принимать HTML через data URL const htmlBase64 = Buffer.from(html, 'utf8').toString('base64'); const dataUrl = `data:text/html;base64,${htmlBase64}`; return [{ json: { // Данные для HTTP Request ноды method: 'POST', url: `${BROWSERLESS_URL}/pdf`, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${BROWSERLESS_TOKEN}` // Если требуется токен }, body: JSON.stringify({ url: dataUrl, // Передаём HTML через data URL options: { format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' } } }), // Альтернативный вариант (если Browserless поддерживает прямой HTML) body_alternative: JSON.stringify({ html: html, // Прямая передача HTML (если поддерживается) options: { format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' } } }), // Метаданные html_length: html.length, data_url_length: dataUrl.length } }]; // ============================================================================ // ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ: // ============================================================================ // 1. Замените YOUR_TOKEN на ваш реальный токен Browserless (если требуется) // 2. Добавьте HTTP Request ноду после этого Code Node // 3. В HTTP Request ноде настройте: // - Method: {{ $json.method }} // - URL: {{ $json.url }} // - Headers: {{ $json.headers }} // - Body: {{ $json.body }} // - Response Format: Binary (или JSON, если Browserless возвращает base64) // 4. После HTTP Request добавьте Code Node для извлечения base64 из ответа // (используйте N8N_EXTRACT_BASE64_FROM_RESPONSE.js) // ============================================================================