# Быстрый старт: 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]
```
Всё готово! 🎉