В современных приложениях на Laravel функциональность генерации PDF встречается очень часто: счета, договоры, отчёты, сертификаты, квитанции. Во всех этих задачах востребован надёжный способ конвертации HTML-шаблонов в PDF-документы. Сам Laravel не содержит встроенной генерации PDF, поэтому разработчики используют сторонние пакеты, которые берут HTML/Blade и преобразуют его в PDF. Среди всех вариантов особенно выделяются два: современный Spatie Laravel PDF и классический Barryvdh Laravel DomPDF.
Spatie Laravel PDF: генерация через браузер
Что это и как работает
Пакет Spatie Laravel PDF от команды Spatie использует механизм браузера Chromium (через библиотеку Browsershot) для рендеринга HTML/Blade в PDF. Это значит, что генерируемый PDF выглядит практически так же, как страница в реальном браузере с поддержкой современных CSS-свойств.
Преимущества
Поддержка современного CSS (Tailwind, Flexbox, Grid).
Точное соответствие стилю веб-страницы: тени, отступы, цвета и прочее.
Возможность выполнить JavaScript перед рендерингом. Это полезно, например, для графиков.
Можно стримить PDF в браузер, сохранять в хранилище, настраивать ориентацию и поля документа.
Пример использования
В контроллере можно написать так:
use Spatie\LaravelPdf\Facades\Pdf;
return Pdf::view('pdf.invoice', [
'invoice' => $invoice,
])->format('a4')->download('invoice.pdf');Это отрендерит Blade-шаблон pdf.invoice и предложит загрузить PDF пользователю.
Ограничения
Требует Chromium/Google Chrome + Node.js/Puppeteer на сервере.
Настройка сложнее, особенно если вы разворачиваете приложение в Docker или CI.
Генерация PDF может быть медленнее чисто серверных библиотек из-за запуска браузера.
Laravel DomPDF: лёгкий PHP-варппер
Что это
Пакет barryvdh/laravel-dompdf - это Laravel-обёртка для библиотеки DomPDF, которая на PHP конвертирует HTML в PDF без внешних зависимостей.
Преимущества
Очень простая установка:
composer require barryvdh/laravel-dompdf.Не требует Chromium, Node.js и других системных зависимостей и подходит даже для shared-хостинга.
Поддерживает базовые операции: скачать PDF, сохранить, показать в браузере.
Быстро работает для простых документов.
Пример использования
use Barryvdh\DomPDF\Facade\Pdf;
$pdf = Pdf::loadView('pdf.invoice', ['invoice' => $invoice]);
return $pdf->download('invoice.pdf');Это создаёт PDF на основе простого Blade-шаблона.
Ограничения
Поддерживает только базовый CSS (HTML4 / CSS2.1), современные возможности (flexbox, grid, Tailwind) не работают.
Не выполняет JavaScript.
Сложные макеты из-за ограничений CSS могут выглядеть неправильно.
Что выбрать и когда?
Когда Spatie Laravel PDF
Вам критично точное соответствие дизайну из браузера.
Используете Tailwind, современные CSS-функции или SVG-графику.
Нужно выполнить JS перед рендерингом.
Когда Laravel DomPDF
Генерация простых PDF: счета, уведомления, стандартные отчёты.
Нужна минимальная настройка и нет возможности ставить браузерные зависимости.
В условиях ограниченного хостинга без Node.js/Chromium.