Spatie's laravel-pdf v2 переходить на драйверну архітектуру для генерації PDF — тепер можна обирати між Browsershot, Cloudflare Browser Rendering, DomPdf і, починаючи з v2.1.0, Gotenberg. У релізі також додано генерацію PDF у черзі, підтримку метаданих, переключення драйверів під час виконання та можливість створювати власні драйвери.
- Архітектура на основі драйверів: Browsershot, Cloudflare і DomPdf
- Драйвер Gotenberg додано у v2.1.0
- Генерація PDF у черзі
- Підтримка метаданих PDF (title, author, subject, keywords, creator, creation date)
- Переключення драйверів під час виконання та кастомні драйвери
# Що нового
# Архітектура на основі драйверів
Найбільша зміна у v2 — перехід на систему драйверів. Замість прив'язки до Browsershot тепер можна вибрати бекенд, який підходить під вашу інфраструктуру:
- Browsershot — рендеринг на базі Chromium через Puppeteer (залишається за замовчуванням)
- Cloudflare — генерація PDF через Cloudflare Browser Rendering API
- DomPdf — чистий PHP-рендеринг без зовнішніх бінарників
Встановіть драйвер за замовчуванням у файлі конфігурації або переключайте під час виконання:
use Spatie\LaravelPdf\Facades\Pdf;
Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->driver('dompdf')
->format('a4')
->save('invoice.pdf');
Також можна реалізувати власні драйвери для бекендів, які пакет не поставляє.
# Драйвер Gotenberg (v2.1.0)
Наступного дня після релізу v2 у v2.1.0 додали вбудований драйвер Gotenberg. Gotenberg — це Docker‑API для конвертації HTML у PDF із використанням headless Chromium. Драйвер відправляє HTML як multipart form‑data на endpoint конвертації Gotenberg і підтримує всі стандартні опції PDF: розмір паперу, поля, орієнтацію, масштаб, діапазони сторінок, header і footer. Використовує вбудований Http facade Laravel, тож додаткові залежності Composer не потрібні.
PR: #302
# Генерація PDF у черзі
Генерацію PDF тепер можна відправляти в чергу через saveQueued(). До виклику можна приєднати callback, що виконається після збереження — наприклад, надіслати лист із згенерованим файлом:
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
У v2 з'явився метод meta() для встановлення метаданих документа PDF:
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 дивіться в документації.
Зауваги щодо оновлення
Це мажорне оновлення з несумісними змінами:
- Якщо ви використовуєте драйвер Browsershot, пакет
spatie/browsershotтепер потрібно явно додати через Composer getBrowsershot()видалено — використовуйтеwithBrowsershot()- Структура файлу конфігурації змінилася (додано ключ
driver) — перепублікуйте файл конфігурації - Підтримка Laravel 10 припинена
Посилання