# Быстрый старт: HTML → Base64 PDF в n8n ## Проблема У вас есть HTML в формате: ```json { "html": "..." } ``` Нужно получить base64 PDF. ## Решение: 3 ноды ### Шаг 1: Code Node - Подготовка запроса **Название:** `Code: Prepare PDF Request` **Код:** Скопируйте из `N8N_HTML_TO_BASE64_PDF_SIMPLE.js` **Важно:** - Замените `YOUR_API_KEY` на ваш реальный API ключ - Выберите сервис конвертации (htmlpdfapi.com, pdfshift.io и т.д.) **Выходные данные:** ```json { "method": "POST", "url": "https://api.htmlpdfapi.com/v1/pdf", "headers": {...}, "body": "{...}" } ``` --- ### Шаг 2: HTTP Request - Конвертация **Название:** `HTTP Request: Convert to PDF` **Настройка:** - **Method:** `{{ $json.method }}` - **URL:** `{{ $json.url }}` - **Authentication:** None (или Basic, если требуется) - **Headers:** ```json {{ $json.headers }} ``` - **Body:** ```json {{ $json.body }} ``` - **Response Format:** `JSON` (или `Binary`, если сервис возвращает binary) **Что делает:** Отправляет HTML в сервис конвертации и получает PDF --- ### Шаг 3: Code Node - Извлечение Base64 **Название:** `Code: Extract Base64 PDF` **Код:** Скопируйте из `N8N_EXTRACT_BASE64_FROM_RESPONSE.js` **Выходные данные:** ```json { "pdf_base64": "JVBERi0xLjQKJeLjz9MK...", "pdf_size_bytes": 123456, "pdf_size_mb": "0.12", "filename": "flights-report-2026-01-16.pdf", "success": true } ``` --- ## Готово! Теперь у вас есть base64 PDF в поле `pdf_base64`. ## Что дальше? ### Вариант A: Сохранить в файл Добавьте Code Node: ```javascript const base64 = $('Code: Extract Base64 PDF').first().json.pdf_base64; const pdfBuffer = Buffer.from(base64, 'base64'); return [{ binary: { data: pdfBuffer, fileName: $('Code: Extract Base64 PDF').first().json.filename, mimeType: 'application/pdf' } }]; ``` Затем используйте ноду **Write Binary File** или **Save to S3**. ### Вариант B: Вернуть в API Добавьте Code Node перед Response: ```javascript const pdfData = $('Code: Extract Base64 PDF').first().json; return [{ json: { success: true, pdf_base64: pdfData.pdf_base64, pdf_size_mb: pdfData.pdf_size_mb, filename: pdfData.filename } }]; ``` ### Вариант C: Отправить по Email Добавьте Code Node: ```javascript const base64 = $('Code: Extract Base64 PDF').first().json.pdf_base64; const pdfBuffer = Buffer.from(base64, 'base64'); const filename = $('Code: Extract Base64 PDF').first().json.filename; return [{ json: { to: 'recipient@example.com', subject: 'Отчёт о рейсах', text: 'Во вложении отчёт о рейсах.', attachments: [{ filename: filename, content: pdfBuffer, contentType: 'application/pdf' }] } }]; ``` Затем используйте ноду **Email Send**. --- ## Популярные сервисы конвертации ### 1. htmlpdfapi.com (рекомендуется) - **Бесплатно:** 100 PDF/месяц - **Платно:** от $9/месяц - **URL:** https://htmlpdfapi.com - **Возвращает:** `{ pdf: "base64..." }` ### 2. pdfshift.io - **Бесплатно:** 100 PDF/месяц - **Платно:** от $9/месяц - **URL:** https://pdfshift.io - **Возвращает:** binary или base64 ### 3. api2pdf.com - **Бесплатно:** 50 PDF/месяц - **Платно:** от $9/месяц - **URL:** https://www.api2pdf.com - **Возвращает:** `{ Pdf: "base64..." }` ### 4. Self-hosted: Gotenberg - **Бесплатно:** полностью - **Требует:** Docker - **URL:** https://gotenberg.dev - **Возвращает:** binary PDF --- ## Отладка ### Проверка HTML В Code Node добавьте: ```javascript console.log('HTML length:', html.length); console.log('HTML preview:', html.substring(0, 200)); ``` ### Проверка ответа сервиса После HTTP Request добавьте Code Node: ```javascript const response = $input.first(); console.log('Response keys:', Object.keys(response)); console.log('Response json keys:', response.json ? Object.keys(response.json) : 'no json'); console.log('Response binary:', response.binary ? 'yes' : 'no'); ``` ### Проверка base64 После извлечения base64: ```javascript const base64 = $json.pdf_base64; console.log('Base64 length:', base64.length); console.log('Base64 preview:', base64.substring(0, 50)); ``` --- ## Частые проблемы ### Проблема: "HTML не найден" **Решение:** Проверьте, что HTML приходит в поле `html`. Если нет, измените первую строку в `N8N_HTML_TO_BASE64_PDF_SIMPLE.js`: ```javascript const html = $json.html || $json.body?.html || $json.data?.html || $json; ``` ### Проблема: "Не удалось извлечь base64" **Решение:** 1. Проверьте формат ответа сервиса 2. Добавьте логирование в `N8N_EXTRACT_BASE64_FROM_RESPONSE.js` 3. Убедитесь, что сервис действительно вернул PDF ### Проблема: PDF пустой или повреждён **Решение:** 1. Проверьте, что HTML валидный 2. Убедитесь, что CSS включён в HTML (inline styles) 3. Проверьте, что сервис поддерживает все используемые CSS свойства --- ## Готовый Workflow ``` [Ваша нода с HTML] ↓ Code: Prepare PDF Request ↓ HTTP Request: Convert to PDF ↓ Code: Extract Base64 PDF ↓ [Использование base64] ``` Всё готово! 🎉