// ============================================================================ // n8n Code Node: HTML → PDF через Browserless (вариант с прямым HTML) // ============================================================================ // Альтернативный вариант - передача HTML напрямую в body // ============================================================================ // Получаем HTML из предыдущей ноды let html = null; if ($json.html) { html = $json.html; } else if ($json.html_base64) { html = Buffer.from($json.html_base64, 'base64').toString('utf8'); } else if ($json.body?.html) { html = $json.body.html; } else if ($binary && $binary.data) { html = $binary.data.toString('utf8'); } else { throw new Error('HTML не найден'); } console.log('📄 HTML получен, длина:', html.length); // ================== НАСТРОЙКИ ================== const BROWSERLESS_URL = 'http://147.45.146.17:3000'; const BROWSERLESS_TOKEN = 'YOUR_TOKEN'; // ⚠️ ЗАМЕНИТЕ на ваш токен // ================== ВАРИАНТ: Использование /screenshot или /pdf ================== // Browserless может иметь разные эндпоинты // Вариант A: POST /pdf с HTML в body const requestA = { method: 'POST', url: `${BROWSERLESS_URL}/pdf`, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${BROWSERLESS_TOKEN}` }, body: JSON.stringify({ html: html, options: { format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' } } }) }; // Вариант B: POST /pdf с data URL const htmlBase64 = Buffer.from(html, 'utf8').toString('base64'); const dataUrl = `data:text/html;base64,${htmlBase64}`; const requestB = { method: 'POST', url: `${BROWSERLESS_URL}/pdf`, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${BROWSERLESS_TOKEN}` }, body: JSON.stringify({ url: dataUrl, options: { format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' } } }) }; // Вариант C: POST /screenshot (если /pdf не работает) const requestC = { method: 'POST', url: `${BROWSERLESS_URL}/screenshot`, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${BROWSERLESS_TOKEN}` }, body: JSON.stringify({ url: dataUrl, options: { type: 'pdf', format: 'A4', printBackground: true } }) }; return [{ json: { // Используйте один из вариантов ниже // Попробуйте сначала вариант A, если не работает - B, затем C // === ВАРИАНТ A: Прямой HTML === method_a: requestA.method, url_a: requestA.url, headers_a: requestA.headers, body_a: requestA.body, // === ВАРИАНТ B: Data URL === method_b: requestB.method, url_b: requestB.url, headers_b: requestB.headers, body_b: requestB.body, // === ВАРИАНТ C: Screenshot (PDF) === method_c: requestC.method, url_c: requestC.url, headers_c: requestC.headers, body_c: requestC.body, // Метаданные html_length: html.length, instruction: 'Попробуйте сначала вариант A в HTTP Request ноде' } }]; // ============================================================================ // ОТЛАДКА: // ============================================================================ // Если получаете ошибку аутентификации: // 1. Проверьте, нужен ли токен для вашего Browserless // 2. Если токен не требуется, уберите строку Authorization из headers // 3. Проверьте документацию Browserless: https://docs.browserless.io // ============================================================================