Генерация PDF на основе заполненных полей

Главные вкладки

Аватар пользователя POSTREALITY POSTREALITY 21 сентября 2017 в 19:42

Друзья, здравствуйте.

Не прошу конкретного "облизывания", но прошу указать направление "в какую сторону глядеть" по следующему вопросу.

Есть внутренний сайт на Drupal 7. Необходимо реализовать функционал, к примеру заполнения пользователем заявления на отпуск и вывода его сгенерированного PDF варианта на новую вкладку.
Попробовал побороть модуль WebForm, но как я понял он умеет только отправлять результат на email и в целом это не совсем пододящий модуль для решения моей задачи.

Требуется примерно следующее:
Создаю новый тип материала, в нём полностью убираю body и добавляю текстовые поля:
- ФИО
- Должность
- Департамент
- Дата начала отпуска
- Дата окончания отпуска
- Текущая дата

После заполнения данных полей, пользователь должен нажать кнопку "Generate PDF" и получить в новой вкладке браузера готовое заявление на отпуск (в котором к заранее созданному текстовому шаблону приписаны результаты его заполненных полей).

При этом сохранять всё это дело как новую статью не надо, чтобы не копить в базе данных мусор.
Как использовать модуль PDF using mPDF я разобрался, тоесть генерировать ПДФ-ки на основе ноды я научился, но хотелось бы иметь слегка другой функционал, чтобы пользователь в созданном для этих целей заполнял только несколько полей и не видел ни body, ни текстового шаблона, а на выходе получал готовое к подписи и распечатыванию заявление.

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

Большое всем спасибо!

Комментарии

Аватар пользователя ivnish ivnish 21 сентября 2017 в 20:23

Я делал подобное для внутреннего проекта. Не сохранять такие материалы не получится, но можно их по крону удалять. Вы всё правильно описали. Создаем новый тип материала, делаем необходимые поля. Пользователь создает материал, сохраняет его. Вы, в кастомном модуле с помощью хука (не помню какого) добавляете вниз к системным кнопкам кнопку "Экспорт в PDF", а на её обработчик вешаем код собственно по генерации. Вы всё так и описали.

чтобы пользователь в созданном для этих целей заполнял только несколько полей и не видел ни body, ни текстового шаблона, а на выходе получал готовое к подписи и распечатыванию заявление.

Так и будет

---------------------------

А вообще, вам наверное будет проще сделать кастомную форму в своем модуле. Она будет открываться как обычная страница, пользователи будут её заполнять, а по итогу также получать PDF. Данные же никуда сохраняться не будут

Аватар пользователя POSTREALITY POSTREALITY 21 сентября 2017 в 20:48

подскажите пожалуйста, а как Вы справились с тем, что текстовые поля всегда встают новой строкой?
К примеру, мне нужен такой результат:
Я, "текст и заполненного пользователем поля", прошу предоставить мне отпуск с "текст и заполненного пользователем поля" по "текст и заполненного пользователем поля".
Чтобы всё было в одну строку. Потому что сейчас у меня все текстовые поля становятся в новую строку.
Спасибо!

Аватар пользователя ivnish ivnish 21 сентября 2017 в 20:51

Не понял вопроса Smile
Я генерировал файлы на основе шаблона LibreOffice ODT. Т.е. подставлял в уже заготовленный файл-шаблон нужные значения

Аватар пользователя POSTREALITY POSTREALITY 21 сентября 2017 в 20:58

Ух ты, а вот это уже что-то новенькое. Спасибо! Сейчас загуглю в эту сторону, если не разберусь, то попрошу у Вас чуть-чуть разжевать, если Вы не против!

Аватар пользователя POSTREALITY POSTREALITY 22 сентября 2017 в 12:25

Друзья!
Всем спасибо за подсказки, но я пока что столкнулся и не могу разобраться с проблемой: Установил модуль "ODT Filler", прикрутил к нему библиотеку phpODT. Создал шаблон через LibreOffice, назначил его через "ODT Filler", подставил необходимые поля.
Файл он генерирует, это конечно очень хорошо, но, блин, в ISO-8859-1 кодировке Sad Циферки показывает правильно, а вот Русский текст (тот что подставляется к шаблону из текстовых полей) превращается в кракозябры.
Вот сижу, воюю, но чего-то вообще не пойму откуда эти кракозябры появляются...

Аватар пользователя POSTREALITY POSTREALITY 25 сентября 2017 в 15:38

Уф, разобрался с кракозябрами. Теперь, переходим к следующей стадии: как показать модулю "ODT Filler" генерировать не *.odt а *.pdf ))) Чую, тут всё ещё хлеще чем с кракозябрами Smile

Аватар пользователя POSTREALITY POSTREALITY 25 сентября 2017 в 16:14

itcrowd72 wrote:

Вы, в кастомном модуле с помощью хука (не помню какого) добавляете вниз к системным кнопкам кнопку "Экспорт в PDF", а на её обработчик вешаем код собственно по генерации.

Но, судя по Вашему первому ответу, Вы всё-же как-то генерировали PDF-ки, не сложно ли Вам тогда описать логику работы Вашей системы? Просто смыслы Вашей и моей системы получается схожи (пользователь заполняет, в шаблон подставляется, на выходе - PDF). И шаблон у Вас как я понял тоже был ODT.

Спасибо!