Spatie представила новую версию пакета Laravel PDF (v2) с поддержкой driver-based архитектуры для генерации PDF. Теперь разработчики могут выбирать между Browsershot, Cloudflare Browser Rendering, DomPdf и новым Gotenberg (начиная с версии 2.1.0). Обновление также добавило очереди для генерации PDF, поддержку метаданных, возможность менять драйверы на лету и создавать собственные драйверы.
Что нового
Driver-based архитектура с поддержкой Browsershot, Cloudflare и DomPdf
Новый драйвер Gotenberg (v2.1.0)
Генерация PDF через очередь
Поддержка метаданных PDF (название, автор, тема, ключевые слова, создатель, дата создания)
Возможность смены драйвера во время работы и создание кастомных драйверов
Драйверная архитектура
Главное изменение в версии 2 это переход на систему драйверов. Теперь вы не привязаны к Browsershot и можете выбрать PDF-бэкенд под вашу инфраструктуру:
Browsershot - рендеринг через Chromium и Puppeteer (по умолчанию)
Cloudflare - генерация PDF через API Browser Rendering от Cloudflare
DomPdf - чистый PHP, не требует внешних бинарников
Драйвер по умолчанию можно задать в конфиге, а также менять на лету:
use Spatie\LaravelPdf\Facades\Pdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->driver('dompdf')
->format('a4')
->save('invoice.pdf');Также можно создавать собственные драйверы для нестандартных бэкендов.
Драйвер Gotenberg (v2.1.0)
В версии 2.1.0 появился встроенный драйвер Gotenberg на базе Docker для конвертации HTML в PDF с использованием headless Chromium. Драйвер отправляет HTML как multipart form-data на эндпоинт Gotenberg и поддерживает все стандартные опции: размер полотна, поля, ориентацию, масштаб, диапазон страниц, колонтитулы. Для работы используется встроенный фасад Http Laravel, дополнительных зависимостей не требуется.
Генерация PDF через очередь
Теперь создание PDF можно отправлять в очередь с помощью метода saveQueued(). После сохранения файла можно вызвать колбек, например, чтобы отправить PDF по email:
use Spatie\LaravelPdf\Facades\Pdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->format('a4')
->saveQueued('invoice.pdf')
->then(fn (string $path, ?string $diskName) =>
Mail::to($user)->send(new InvoiceMail($path))
);Метод также поддерживает указание подключения и очереди через параметры $connection и $queue.
Метаданные PDF
Метод meta() позволяет задавать метаданные документа:
use Spatie\LaravelPdf\Facades\Pdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->meta(
title: 'Invoice #1234',
author: 'Acme Corp',
subject: 'Monthly Invoice',
keywords: 'invoice, billing',
creator: 'Laravel PDF',
creationDate: now(),
)
->save('invoice.pdf');Подробнее о форматировании PDF можно узнать в документации Spatie.
Важные изменения при обновлении
spatie/browsershotтеперь нужно явно подключать через Composer при использовании BrowsershotМетод
getBrowsershot()удален, используйтеwithBrowsershot()Структура конфигурационного файла изменилась (новый ключ
driver)Поддержка Laravel 10 снята