Мы разработали множество модулей, связанных с PDF в Drupal 7, но недавно мы пришли к интересному решению в новом
Drupal 8.
Реализация: экспорт одного узла в отдельный отчет, пакетированный экспорт до 600 узлов в один отчет, без длительных временных затрат и даже укладывающийся в лимит Pantheon.io.
Первоначальной задачей было создание отчетов в формате PDF из узлов заданного типа контента с помощью модуля Drupal Entity Print. Основной вариант использования модуля Entity Print позволяет выбрать количество узлов и распечатать один PDF-файл. Модуль Entity Print позволяет использовать собственные шаблоны и т.д.
Такой формат отлично подходит для 10 или 20 узлов. Но при попытке сгенерировать PDF из 600 узлов, мы столкнулись с лимитом памяти Pantheon и ограничениями по времени выполнения PHP. В нашем случае, эта процедура может занять около 2 часов и около 1 ГБ памяти, что неприемлемо по ограничениям в Pantheon, при этом модуль Entity Print не поддерживает возможности пакетирования.
Основная идея - создать один PDF-файл из одного узла, а затем объединить все отдельные PDF-файлы в один большой PDF-файл. Решение было найдено в пакетной функции, которая позволяет создать 600 отдельных PDF-файлов из 600 узлов.
Также, чтобы уменьшить вес файла и сократить затраты по времени, мы решили использовать инструмент drush, который тоже настроили на функцию пакетирования. При необходимости, эту пакетную функцию можно запустить из панели управления Drupal.
Результат впечатлил - 596 сообщений были обработаны примерно за 14 минут, без каких-либо проблем с памятью или тайм-аутом.
Следующим шагом будет объединение всех отдельных PDF-файлов в один большой PDF-файл. Мы создали еще одну функцию drush, с использованием GhostScript и объединили все PDF-файлы в один.
Итоги работы:
Время обработки пакета данных составило около 9 минут, а результат - 596 страничных PDF-файлов, общим весом около 25 МБ.