it-blog.club
DomPDF создаём PDF файлы на PHP

DomPDF создаём PDF файлы на PHP

На просторах интернета есть куча различных PHP библиотек для генерации PDF файлов. Думаю, что многие программисты уже успели выбрать свою избранную, мой же выбор упал на DomPDF.

Описать её можно двумя словами: Быстро и Просто.

Основная идея заключается в том, что вы можете передать в неё просто готовый html шаблон и получить на выходе готовый PDF файл. (Спасибо кеп)

Я не буду сейчас описывать все возможности при работе с данной библиотекой, а просто на примере покажу, как просто мы можем собрать свой простой PDF.

УСТАНОВКА

Если у вас ещё нет данной библиотеки, то давайте установим её используя composer.
Для этого, используя консоль, перейдём в папку с проектом и выполним команду:

composer require dompdf/dompdf

setupDomPdf

ПОДКЛЮЧЕНИЕ

В большинстве проектов библиотеки из папки vendor уже подключаются автоматически. Если же вы не делали автоматического подключения или же просто хотите попробовать поработать с данной библиотекой, то можете просто подключить autoload в файле в котором будете писать генерацию.

require_once 'vendor/autoload.php';

Далее подключим саму библиотеку

use Dompdf\Dompdf;
$dompdf = new Dompdf();

HTML ШАБЛОН

Теперь давайте соберём простенький HTML шаблон. Он не будет нести в себе ни какого смысла. Я просто покажу насколько просто с помощью DomPDF сгенерить PDF файл с помощью PHP.

Давайте напишем функцию, которая будет возвращать наш HTML.


function getHtml() {
$html = '
<style>
li {color: #f00;}
div {border: 1px solid aqua}
.page_break { page-break-before: always; border: none;}
</style>';
$html .= '<div><ul>';
for ($i = 0; $i <= 10; $i++) {
$html .= '<li>'.$i.'</li>';
}
$html .= '</ul></div>';
$html .= '<div class="page_break"></div>';
$html .= '<img src="'.$_SERVER['DOCUMENT_ROOT'].'/pdf.jpg">';
return $html;
}

А теперь давайте разберём, что в себя будет включать HTML шаблон.

CSS:

Как мы видим, в DomPDF можно передать CSS, тем самым задав стилевое оформление файлу.
Класс page_break – будет использоваться для разрыва страниц нашего PDF файла. Ниже вы поймёте о чём я говорю.

HTML:

Далее по файлу у нас добавляется div и ul.

Как можно заметить я разрываю html на отдельные участки, и каждый раз дополняю нашу переменную $html. Это для того, чтобы мы могли без проблем встраивать PHP код в наш шаблон.
Далее мы видим цикл for. Который выводит li элемент

Далее идёт div с классом page_break. Можно сразу догадаться, что на первой страницы мы кроме списка цифр ничего больше не увидим.

Ну а на второй странице нас будет ожидать изображение.

Здесь стоит обратить внимание, чтобы добавить изображение в domPDF, путь до него должен идти от DOCUMENT_ROOT, а не от корня проекта.

Генерация файла PDF

Далее нам необходимо вызвать рад методов отвечающих за саму генерацию и в качестве параметров передать наш HTML шаблон.


$dompdf->loadHtml(getHtml());
$dompdf->render();
$dompdf->stream();

Думаю по названию каждого метода можно понять за что они отвечают. Но пару слов от себя всё же вставлю.

Методы loadHtml и render обязательно в любом случае. Дело в том, что данная библиотека позволяет нам либо отдать PDF пользователю сразу для скачивания, либо просто сохранить на сервере. Метод stream как раз отвечает за скачивание Если нам нужно просто сохранить файл на сервере, то тогда вместо stream нужно использовать output();

Вот как это выглядело бы в коде:


	$dompdf->loadHtml(getHtml());
$dompdf->render();
$output = $dompdf->output();
$fileName ='PDF_FILE_'.date('Y_m_d_H_i_s');
$fileLink = "/". $fileName .".pdf";
file_put_contents($_SERVER['DOCUMENT_ROOT'] . $fileLink, $output);
После выполнения у нас в корне проекта сохранится наш файл.

Собственно всё. К конце будут скриншоты примера который у меня получился на выходе.

ПРИМЕЧАНИЯ!

1)      DOMPDF принимает вёрстку любой сложности, всё ограничено лишь вашей фантазией и ТЗ.

2)      В DOMPDF есть проблемы с подключением CSS и JS. Так что я рекомендую использовать все стили в генерируемом HTML шаблоне. Это касается так же Bootstrap.

3)      Есть проблемы с шрифтами и кириллицей, данная проблема решаема, возможно в будущем опишу её, если данная тема будет популярна.

4)      В DOMPDF можно использовать header и footer страниц с повторением на каждой странице. Так же смогу описать как этого добиться, но только если данная тема будет интересна на моём блоге.

5)      Так же в DomPDF можно вывести счётчик страниц. Опишу при тех же условиях и пункты выше.

Screenshot_40.png  Screenshot_41.png


it-blog.club 43
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать