Судя из названия заметки, сегодня мы попробуем делать pdf из шаблона. Оговорюсь сразу что на обычном хостинге такой вариант вряд ли будет приемлемым, т.к. нам нужно будет устанавливать дополнительное ПО, поэтому необходим
Для начала установим нужный софт —
apt-get install inkscape
Inksape — это бесплатный векторный редактор, с помощью его будем создавать шаблон и из этого шаблона будем делать pdf документ. Поэтому его не мешало бы установить и на свой компьютер. Можно создать сложный шаблон с картинками и всеми остальными «плюшками», но мы в учебных целях создадим просто пустую страницу с несколькими блоками для вставки текста.
Получился вот такой простой шаблон, идем далее. Сохраняем этот шаблон в svg формате. На этом подготовительные действия заканчиваются, переходим к теме заметки.
Для того чтобы сгенерировать pdf нам нужно прочитать файл шаблона, подставить в нужные поля наши значения и создать pdf. Приступим. Напишем функцию которая открывает шаблон и подставляет нужные значения:
function prepareTemplate($template, $templateTmp, $data) { $fp = fopen($template, 'r'); $fpTmp = fopen($templateTmp, 'w+'); $fileData = fread($fp, filesize($template)); $fileData = str_replace(array(array_keys($data)), array(array_values($data)), $fileData); fwrite($fpTmp, $fileData); fclose($fp); fclose($fpTmp); }
Функция очень простая, на вход она принимает три параметра:
- Путь к шаблону
- Путь к временному файлу (с уже подставленными значениями)
- Ассоциативный массив, ключ — имя блока, значение — данные для вставки
Далее она открывает файл шаблона, заменяет в нем нужные поля и сохраняет все изменения во временный файл. Этот временный файл мы и будем конвертировать.
Приступим к достижения нашей цели. Для этого нужно выполнить одну системную команду
inkscape -T /path/to.svg -P /path/to.pdf
Теперь свяжем все это с той функцией что мы написали ранее:
$source = "/tmp/template.svg"; $tmp = "/tmp/templateTmp.svg"; $pdf = "/tmp/file.pdf"; $data = array( '{BLOCK_1}' => 'Текст в первый блок', '{BLOCK_2}' => 'Текст во второй блок', '{BLOCK_3}' => 'Текст в третий блок', ); prepareTemplate($source, $tmp, $data); system("inkscape -T {$tmp} -P {$pdf}"); unlink($tmp);
Вот и все! С помощью нехитрых приспособлений и 5 минут времени мы с легкостью генерируем pdf документы из шаблона.
Данный подход можно использовать, например, при печати билетов в которые нужно подставлять номера мест и дату или для других схожих целей.