Что нового в Spatie Laravel PDF v2

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 снята

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

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

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

Наследование моделей в Laravel с помощью Parental

Разбор пакета Parental для Laravel, который реализует single table inheritance (STI) в Eloquent, т.е наследование моделей в одной таблице. Статья объясняет, зачем это нужно, как настроить Parental, управлять типами моделей и работать с дочерними связями.

Observers в Laravel: чистый способ обработки событий моделей

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