Сниппет makePDF - для генерации PDF

Накидал небольшой сниппет на базе библиотеки mpdf для различных случаев генерации pdf-файлов.
Позволяет генерировать пдф из переданного html, адреса страницы (лучше передавать версию для печати), массива $data либо строки из базы данных. При этом для шаблона используется, при необходимости, заданный чанк. Может сохранять в файлы, отдавать в браузер либо использоваться для создания прикрепленных файлов для FormLister через prepareProcess.

Примеры вызовов:
[[makePDF? &html=`<html><body>hello world!</body></html>` &flag=`S`]]
[[makePDF? &id=`5` &tpl=`chunkName`]]
[[makePDF? &id=`10` &table=`mytable` &idField=`pid` &tpl=`chunkName`]]
[[makePDF? &page=`25`]]
[[makePDF? &page=`test/test.html?print` &flag=`F` &custom_path=`assets/files/myfolder/`]]

Для FormLister (например, нужно по переданным данным сформировать и отправить платежку)
$attachFiles = $modx->runSnippet("makePDF", array('action' => 'FormLister', 'data' => $pfd_data, 'tpl' => 'zajavkaReportTpl', 'folder_name' => 'zajavka'));
if (is_array($attachFiles)) {
    $FormLister->config->setConfig(array('attachFiles' => $attachFiles));
}


Прим. Для передачи потока в браузер страница должна иметь тип application/pdf и не выводить ничего кроме данного сниппета.

18 комментариев

avatar
Неплохой сниппет. Нужно его в репозитарий.
Плюс немного расписать лучше параметры, примеры и добавить документацию в docs.evo.im
avatar
Все параметры расписаны :)
avatar
Хорошая штука, спасибо. Во многих случаях требуется, теперь готовое есть.
avatar
Непонятно, от чего зависит, но не могу запустить на 1.4.4
Даже пример выдает одну и ту же ошибку
[[makePDF? &html=`<html><body>hello world!</body></html>` &flag=`S`]]

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 16384 bytes) in /home/.../manager/includes/document.parser.class.inc.php on line 1960
avatar
Вот это имеется?
avatar
Ну да, пример-то из кода его взял
avatar
Настройки в php.ini какие?
Навскидку — жрет же память как не в себя — возможно настройки самого сервера не рубят процессы php вовремя? Шаред хостинг?
avatar
Шаред.
Ставил и гиг — та же самая ботва, не может себе «tried to allocate 16384 bytes» — там сущие копейки в-общем, от 8 до 20 Кб
avatar
Удалось ли решить? У меня аналогичная проблема, по вызову
[[makePDF? &html=`<html><body>hello world!</body></html>`]]

получаю
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 16384 bytes) in D:\OSPanel\domains\domen.ru\manager\includes\document.parser.class.inc.php on line 1836

Версия 1.4.0, локалка OpenServer
avatar
Нет, плюнул, отдал генерацию на браузёр. Сколько памяти не выделял — валилось
avatar
спасибо за оперативный ответ
avatar
Плюнуть проще всего — а вот написать мне доступы, чтобы разобраться — тут да, тут надо потрудиться. Все же знают как дорого я беру за помощь в личных сообщениях :)))
avatar
Кто вам без доступа наугад ответит на вопрос «почему». Тут обычно с доступом за ответ на такой вопрос денег просят, а вы вообще хотите, чтобы угадали на пальцах бесплатно :))
avatar
Пока на локалке, начал уже реанимировать свой старенький mpdf57 (когда-то делал)… Но если не откажете в любезности заглянуть во внутрь, сейчас закину на хостинг и дам доступ в лс.
avatar
Небольшой фикс для всех тех, у кого не хватило памяти.
Комментарий отредактирован 2018-11-02 16:03:05 пользователем webber
avatar
Большое спасибо!!!
avatar
При генерации в цикле сниппет не работает. Создает только первую страницу, остальные игнорирует.
Подскажите как исправить.
Как задать параметры выходного PDF (ориентация, формат)?
avatar
Как его установить? Через репозитарий и папку Install не сработало (
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.