N8n convert to pdf

N8n Convert to PDF: Полное руководство по автоматизации создания PDF-документов

N8n — это инструмент с открытым исходным кодом для оркестрации рабочих процессов (workflow automation), который позволяет соединять различные приложения и сервисы без написания кода. Одной из распространенных задач в бизнес-процессах является преобразование данных, текстов, HTML-страниц или изображений в формат PDF. В отличие от некоторых других платформ автоматизации, в N8n нет встроенного узла (node) с единственной функцией «Convert to PDF». Однако это не ограничивает возможности платформы, а открывает множество гибких и мощных способов реализации данной задачи путем интеграции со специализированными сервисами, использования внешних API или запуска собственного кода.

Архитектурные подходы к конвертации в PDF в N8n

Существует три основных подхода к созданию PDF-файлов в рабочих процессах N8n, каждый со своими преимуществами, сложностью и сценариями применения.

    • Использование специализированных узлов N8n: Применение узлов, которые могут генерировать или обрабатывать файлы, таких как «HTML to PDF» или узлы для работы с шаблонами.
    • Интеграция со внешними API и сервисами: Использование узла «HTTP Request» или готовых узлов для интеграции с облачными API, которые предоставляют услуги конвертации.
    • Использование пользовательского кода: Запуск скриптов на JavaScript/Python внутри N8n с использованием библиотек для генерации PDF, таких как pdfkit, jsPDF или Puppeteer.

    Детальный разбор методов конвертации

    1. Использование узла «HTML to PDF» (на основе Gotenberg)

    Наиболее прямой способ в экосистеме N8n — это использование неофициального, но популярного пользовательского узла «HTML to PDF». Этот узел является оберткой вокруг открытого инструмента Gotenberg. Для его использования необходимо самостоятельно развернуть сервер Gotenberg (например, через Docker) и указать его адрес в настройках узла.

    Процесс настройки рабочего процесса:

    • Установите пользовательский узел «HTML to PDF» через менеджер пакетов N8n (npm).
    • Разверните Gotenberg: docker run -p 3000:3000 gotenberg/gotenberg:7.
    • В рабочем процессе добавьте узел «HTML to PDF».
    • В параметрах узла укажите URL вашего сервера Gotenberg (например, http://localhost:3000).
    • Передайте в узел HTML-контент (как строку или из предыдущего узла, например, шаблонизатора).
    • Узел вернет бинарные данные PDF-файла, которые можно сохранить с помощью узла «Write Binary File» или отправить в облачное хранилище (Google Drive, S3).

    2. Интеграция с внешними API через HTTP Request

    Этот метод предполагает использование облачных сервисов конвертации. Вы отправляете исходные данные (HTML, URL документа) на их API и получаете готовый PDF.

    Сервис Ключевые параметры в HTTP Request Преимущества
    Api2PDF URL для конвертации или raw HTML, ключ API, опции (ориентация, размер бумаги). Высокая надежность, поддержка Chromium, водяные знаки, шифрование.
    PDFlayer (apilayer) Параметр document_url или html, ключ доступа, параметры CSS. Простой API, возможность использования секретных ключей в N8n.
    Own API (например, внутренний сервис) Любые параметры, определенные вашим API. Часто используется метод POST с телом запроса в формате JSON. Полный контроль над процессом и безопасностью данных.

    Пример настройки узла HTTP Request для Api2PDF:

    • Метод: POST
    • URL: https://v2018.api2pdf.com/chrome/html/pdf
    • Заголовки: Authorization: YOUR_API_KEY, Content-Type: application/json
    • Тело запроса (JSON):
      {
        "html": "{{$node['Шаблонизатор'].json['htmlContent']}}",
        "fileName": "document.pdf",
        "options": {
          "marginTop": "0.5in",
          "marginBottom": "0.5in"
        }
      }
          

    3. Генерация PDF с помощью пользовательского кода (Code Node)

    Узел «Code» в N8n позволяет выполнять JavaScript. С его помощью можно генерировать PDF напрямую, используя библиотеки, доступные в среде выполнения N8n.

    Пример с использованием библиотеки pdfkit (предварительно должен быть установлен в папку с N8n):

    const PDFDocument = require('pdfkit');
    const fs = require('fs');
    const streamBuffers = require('stream-buffers');
    
    // Создаем документ
    const doc = new PDFDocument({ margin: 50 });
    const bufferStream = new streamBuffers.WritableStreamBuffer();
    
    // Пишем в буферный поток
    doc.pipe(bufferStream);
    doc.fontSize(25).text('Заголовок документа', { align: 'center' });
    doc.moveDown();
    doc.fontSize(12).text('Этот PDF был сгенерирован внутри узла Code в N8n.');
    // ... добавление таблиц, изображений и т.д.
    doc.end();
    
    // Ждем окончания записи и возвращаем данные
    bufferStream.on('finish', () => {
      const pdfBuffer = bufferStream.getContents();
      // Кодируем в base64 для передачи в следующем узле
      const pdfBase64 = pdfBuffer.toString('base64');
      return [ { json: {}, binary: { data: pdfBase64 } } ];
    });
    

    Важно: Для сложных HTML-шаблонов лучше использовать связку узла Code с библиотекой типа Puppeteer (запуск headless Chrome), но это требует установки дополнительных зависимостей на сервер, где работает N8n.

    Типовые рабочие процессы (Workflows)

    Workflow 1: Создание PDF-отчета из данных базы данных

    1. Узел «PostgreSQL» или «MySQL»: извлечение данных (например, продажи за день).
    2. Узел «HTML» или «Template»: преобразование данных в HTML-строку с использованием шаблона (Handlebars).
    3. Узел «HTML to PDF» (или HTTP Request к API): конвертация полученного HTML в PDF.
    4. Узел «Google Drive» или «S3»: загрузка полученного бинарного файла в облачное хранилище.
    5. Узел «Email Send» (например, Gmail): отправка письма с вложенным PDF или ссылкой на файл.

    Workflow 2: Конвертация входящих писем или форм в PDF

    1. Триггер: «Email Trigger» (IMAP) или «Webhook» (для данных с формы на сайте).
    2. Узел «Code»: обработка и структурирование входящих данных (текст письма, вложения, поля формы).
    3. Узел «HTTP Request»: отправка структурированных данных на внутренний API, который генерирует PDF, или использование шаблона, как в первом workflow.
    4. Узел «Airtable» или «База данных»: сохранение метаданных (дата, отправитель, ссылка на PDF) для учета.

    Обработка и дальнейшие действия с PDF-файлом

    После генерации PDF в бинарном формате, N8n позволяет выполнить с ним множество операций:

    • Сохранение локально: Узел «Write Binary File». Укажите путь и имя файла.
    • Загрузка в облако: Используйте узлы для Google Drive, Dropbox, Amazon S3, Nextcloud. Обычно требуется передать binary data и имя файла.
    • Отправка по почте: Узлы для Gmail, Outlook. Вложения добавляются через параметр Attachments, где указывается binary data и имя файла.
    • Объединение PDF: Для этого можно использовать внешний API (например, PDF.co, Ilovepdf) или пользовательский код с библиотекой вроде pdf-lib.
    • Добавление электронной подписи или водяных знаков: Как правило, требует интеграции со специализированными API или запуска кастомного скрипта.

    Оптимизация и лучшие практики

    • Кеширование шаблонов: Если вы генерируете много однотипных PDF, храните HTML-шаблоны в отдельном узле «Function» или во внешнем хранилище, чтобы не дублировать код.
    • Обработка ошибок: Всегда добавляйте узел «Error Trigger» или настраивайте ветку «Catch» для узлов, работающих с внешними API, чтобы обрабатывать сбои сети или некорректные данные.
    • Безопасность данных: При использовании облачных API для конфиденциальных данных убедитесь в соответствии сервиса GDPR/ISO. Рассмотрите вариант использования self-hosted решений (Gotenberg, внутренний API).
    • Управление памятью: Генерация больших PDF-файлов или обработка множества файлов параллельно может нагружать память. Настройте соответствующие лимиты в N8n и используйте потоковую передачу данных, где это возможно.
    • Именование файлов: Динамически генерируйте понятные имена файлов на основе данных (например, Отчет_{{дата}}_{{клиент}}.pdf).

Ответы на часто задаваемые вопросы (FAQ)

Есть ли в N8n встроенный узел для конвертации в PDF?

Нет, в стандартной поставке N8n нет узла с названием «Convert to PDF». Однако функциональность реализуется через комбинацию других узлов: «HTML to PDF» (пользовательский), «HTTP Request» (для внешних API) или «Code» (для кастомной генерации).

Какой метод конвертации самый быстрый и дешевый для массового создания PDF?

Для массовой генерации наиболее экономичным и контролируемым является self-hosted подход с использованием узла «HTML to PDF» (Gotenberg) или запуска собственного микросервиса с Puppeteer. Это исключает плату за каждый документ. Если нет возможности поддерживать свой сервер, стоит выбирать API-сервисы с помесячной подпиской и без ограничений по количеству страниц.

Как передать динамические данные (например, из таблицы) в PDF-шаблон?

Стандартный путь: данные извлекаются узлом базы данных или из приложения (типа Google Sheets). Затем они передаются в узел «HTML» или «Template», где с помощью языка шаблонов (например, Handlebars) вставляются в HTML-структуру. Этот HTML затем конвертируется в PDF.

Можно ли создать PDF не из HTML, а из Word или Excel файлов в N8n?

Прямого способа нет. Стандартная стратегия: сначала конвертировать Word/Excel в HTML или PDF с помощью внешнего сервиса. Например, можно использовать CloudConvert API (поддерживает множество форматов) через узел «HTTP Request», чтобы получить PDF, а затем обработать его далее в рабочем процессе N8n.

Как добавить нумерацию страниц, колонтитулы или оглавление в генерируемый PDF?

Эти элементы должны быть добавлены на этапе создания HTML-контента или в процессе генерации PDF. При использовании HTML+CSS для конвертации через Gotenberg или API, колонтитулы и нумерация создаются с помощью CSS-правил @page и свойств content для псевдоэлементов. В библиотеке pdfkit для Node.js это делается программно через вызовы методов для добавления текста на каждую страницу.

Где хранятся сгенерированные PDF-файлы в процессе выполнения workflow?

До момента явного сохранения файл существует только в оперативной памяти рабочего процесса в виде бинарных данных (обычно в кодировке base64). Он физически сохраняется только после прохождения через узел записи на диск («Write Binary File») или загрузки в облачное хранилище. Рекомендуется не хранить файлы долго на сервере N8n, а сразу передавать их в системы долговременного хранения (S3, Google Drive).

Как настроить повторную попытку (retry) при сбое конвертации через внешний API?

В настройках узла «HTTP Request» (и многих других узлов) есть секция «Error Handling». Там можно активировать опцию «Retry on Fail» и задать количество попыток и интервалы между ними. Это полезно при временных сбоях сети или API.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *