// ============================================================================ // n8n Code Node: Конвертация HTML в Base64 PDF // ============================================================================ // Используйте этот код после "Code: Process Flights Data" // для подготовки данных для конвертации в PDF и получения base64 // ============================================================================ // Получаем HTML из предыдущей ноды const processedData = $('Code: Process Flights Data').first().json; if (!processedData || !processedData.html) { throw new Error('HTML не получен из предыдущей ноды'); } const html = processedData.html; // ==== ВАРИАНТ 1: HTTP Request к сервису, который возвращает base64 PDF ==== // Используйте этот вариант с HTTP Request нодой после этого Code Node // Сервисы, которые поддерживают base64: // - htmlpdfapi.com // - pdfshift.io // - api2pdf.com // - и другие return [{ json: { method: 'POST', url: 'https://api.htmlpdfapi.com/v1/pdf', // Замените на ваш сервис headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_API_KEY' // Замените на ваш API ключ }, body: JSON.stringify({ html: html, options: { format: 'A4', printBackground: true, margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' } }, // Если сервис поддерживает прямое возвращение base64 base64: true }) } }]; // ==== ВАРИАНТ 2: Если сервис возвращает binary, конвертируем в base64 ==== // Используйте этот код в Code Node ПОСЛЕ HTTP Request ноды // (когда получили PDF в binary формате) /* const pdfBinary = $binary.data; // Получаем binary данные из HTTP Request // Конвертируем binary в base64 const base64 = pdfBinary.toString('base64'); return [{ json: { pdf_base64: base64, pdf_size_bytes: pdfBinary.length, pdf_size_mb: (pdfBinary.length / (1024 * 1024)).toFixed(2), flights_count: processedData.flights_count, generated_at: processedData.generated_at, filename: `flights-report-${new Date().toISOString().split('T')[0]}.pdf` } }]; */ // ==== ВАРИАНТ 3: Использование Execute Command с wkhtmltopdf ==== // Если у вас установлен wkhtmltopdf на сервере n8n // Раскомментируйте и используйте в Execute Command ноде /* // Сохраняем HTML во временный файл const htmlBase64 = Buffer.from(html, 'utf8').toString('base64'); const timestamp = Date.now(); const htmlFile = `/tmp/flights-${timestamp}.html`; const pdfFile = `/tmp/flights-${timestamp}.pdf`; // Команда для Execute Command ноды: // echo '{{ $json.html_base64 }}' | base64 -d > {{ $json.html_file }} && \ // wkhtmltopdf --page-size A4 --margin-top 20mm --margin-right 15mm --margin-bottom 20mm --margin-left 15mm \ // --print-media-type {{ $json.html_file }} {{ $json.pdf_file }} && \ // cat {{ $json.pdf_file }} | base64 && \ // rm -f {{ $json.html_file }} {{ $json.pdf_file }} return [{ json: { html_base64: htmlBase64, html_file: htmlFile, pdf_file: pdfFile } }]; */