- Добавлена полная интеграция с Telegram Mini App (динамическая загрузка SDK) - Отдельный компактный дизайн для Telegram Mini App - Добавлен loader при инициализации (предотвращает мелькание SMS-авторизации) - Улучшена навигация: кнопки "Назад" и "К списку заявок" теперь сохраняют авторизацию - Telegram Mini App: кнопка "Выход" просто закрывает приложение - Telegram Mini App: заявки "В работе" скрыты из списка - Веб-версия: для заявок "В работе" добавлена кнопка "Просмотреть в Telegram" (ссылка на @klientprav_bot) - Telegram Mini App: кнопки действий в черновиках расположены вертикально - Веб-версия: убрано отображение номера телефона в приветствии - Исправлена проблема с возвратом к списку черновиков (не требует повторной SMS-авторизации) - Заблокировано удаление и редактирование заявок со статусом "В работе" - Добавлена документация по Telegram Mini App интеграции
97 lines
3.5 KiB
JavaScript
97 lines
3.5 KiB
JavaScript
// ============================================================================
|
||
// 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
|
||
}
|
||
}];
|
||
*/
|