В этой статье мы рассмотрим решение задачи генерации файла в формате PDF из данных, введенных пользователем в форму, созданную модулем Webform, наложение этих данных на заранее подготовленную подложку и отправку на почту пользователю, заполнившему форму.

Нам понадобятся следующие модули:

  • Webform
  • Views
  • Views PDF
  • Rules
  • Webform Rules
  • Mimemail

и библиотеки

  • tcpdf
  • fpdi

1. Устанавливаем необходимые модули.

2. Кладем необходимые библиотеки в /sites/all/libraries.

3. Создаем форму с необходимыми полями.

4. Создаем новый вьюс.

В качестве типа сущности для отображения выбираем “Отправленные формы”. Страница и блок нам не понадобятся, поэтому соответствующие галочки можно снять.

 

На странице редактирования вьюса создаем дисплей типа PDF Page.

 

В поля добавляем “Webform submission data: Значение” для каждого поля, заполняемого пользователем

 

В поле Webform node вводим nid вебформы, в Component data выбираем поле, заполняемое пользователем.

 

В качестве контекстного фильтра используем Отправленные формы: Sid. Если значения нет в URL, то выводим “Страница не найдена”.

 

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

Для этого в нашем вьюсе переходим в настройки отображения PDF Fields

В поле “Upload New Template File” загружаем PDF файл и применяем настройки. После этого опять открываем это же окно и в Template PDF выбираем загруженный файл.

Далее необходимо в этом же окне пройтись по всем добавленным ранее полям и указать им позиционирование на листе и настройки шрифта.

 

5. Теперь необходимо настроить правило, которое будет при отправке формы создавать новый файл и отправлять его по почте.

Переходим в админку модуля Rules и создаем новое правило.

В качестве события выбираем “After a webform has been submitted”

В качестве действия сначала необходимо выбрать Save PDF as file on server, где нужно указать вьюс, созданный ранее, в аргументы передать [data:sid] и в STORE PATH указать путь, по которому будут храниться сгенерированные файлы, например sites/default/files/[data:sid].pdf

Вторым действием должен быть Send HTML e-mail, у которого в поле ATTACHMENTS нужно указать путь к сгенерированному файлу, например sites/default/files/[data:sid].pdf. Все остальные поля этого действия заполняются в зависимости от требований к оформлению письма.

Комментарии

POSTREALITY

Коллега, огромное спасибо Вам за столь полезную статью! Но, кажется, то ли лыжи не едут, то ли я ... Дело в том, что дойдя до момента создания вьюса, я встретился со следующей ситуацией: когда добавляю дисплей типа PDF Page, в ответ получаю полностью пустую страницу, а не страницу конфигурации создаваемого дисплея. Складивается такое ощущение, что что-то не донастроено. Возникает вопрос: а не требуют ли каких либо "тонкостей" библиотеки tcpdf и fpdi? Спасибо!

Спасибо за вопрос! С библиотеками никаких дополнительных операций не требуется. Рекомендую посмотреть логи на предмет ошибок.
Дмитрий

Здравствуйте,благодарю за статью. Не подскажите как сделать вывод русского языка? В данный момент выводит знаки вопроса,вместо русского языка.

Добрый день! Скорее всего проблема в том, что в используемом шрифте нет кириллических символов. Попробуйте другой.
Кристина

Здравствуйте! У меня такая же проблема.
Ошибка "Warning: require_once(sites/all/libraries/tcpdf/tcpdf.php")
Но в папке с этой библиотекой такого файла нет изначально.

Добрый день! Возможно в библиотеке что-то поменялось. Попробуйте взять более старую версию.
Кристина

Спасибо! Попробую.

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