Генерация PDF в Laravel: Spatie Laravel PDF vs Laravel DomPDF

В современных приложениях на 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.

Комментарии (0)

Войдите, чтобы оставить комментарий

Похожие статьи

Как создать нового пользователя в MySQL и выдать ему права

Подробное руководство по созданию пользователей в MySQL и управлению их правами доступа. В статье разобраны команды CREATE USER, GRANT, REVOKE, примеры настройки аутентификации и типичные ошибки при работе с правами.

7 0 2 мин

Как создать новый проект на Laravel: подробное руководство для начинающих

Подробное руководство по созданию и настройке нового проекта на Laravel. Подходит для начинающих, которые хотят разобраться с установкой, структурой и запуском приложения.

49 0 1 мин

Как установить Docker и Docker Compose на Ubuntu и RedHat системы (2025)

Подробная инструкция по установке Docker и Docker Compose на Debian-based и RedHat-based системы. Разбор всех команд по шагам, настройка GPG-ключей, добавление репозиториев, запуск сервиса, проверка и устранение типичных ошибок.

144 0 2 мин