Генерация PDF файлов на Laravel 10+

Был выпущен новый пакет под названием spatie/laravel-pdf , пакет для создания PDF-файлов в приложениях Laravel. Внутри он использует Chromium для создания PDF.

Наши услуги Стать партнером
Генерация PDF файлов на Laravel 10+
27.08.2025 27.08.2025 5

Генерация PDF файлов на Laravel 10 в 2024 году

Был выпущен новый пакет под названием spatie/laravel-pdf , пакет для создания PDF-файлов в приложениях Laravel. Внутри он использует Chromium для создания PDF-файлов из представлений Blade. Вы можете использовать современные функции CSS, такие как grid, flexbox и даже такие ui-фрейморки, как Tailwind, для создания красивых PDF-файлов.

В этом посте я хотел бы представить и продемонстрировать пакет.

Создание PDF файла

После установки пакета вы можете использовать PDFфасад для создания PDF-файлов. Основой для создания PDF-файлов является HTML, а самый простой способ создания HTML в приложении Laravel — использовать представление.

Вот пример создания PDF-файла из представления Blade.

use Spatie\LaravelPdf\Facades\Pdf; 
Pdf::view('pdf.invoice')->save('/some/directory/invoice.pdf');

PHP

Под капотом пакет через Browsershot запустит экземпляр Chrome, загрузит ваш HTML и позволит Chrome сохранить PDF-файл. Поскольку Chrome имеет современный механизм рендеринга, вы сможете использовать современные функции CSS для создания PDF-файла.

В качестве второго параметра вы можете передать массив данных, которые будут доступны в представлении. Вы можете использовать это для передачи модели Eloquent, например счета, в представление.

use Spatie\LaravelPdf\Facades\Pdf;
Pdf::view('pdf.invoice', ['invoice' => $invoice])->save('/some/directory/invoice.pdf');

PHP

Помимо локального сохранения, вы можете сохранить PDF-файл на любом из настроенных вами дисков .

Вот пример сохранения PDF-файла на s3диск.

use Spatie\LaravelPdf\Facades\Pdf; 
Pdf::view('invoice')->disk('s3')->save('invoice-april-2022.pdf');

PHP

Вместо использования представления Blade вы также можете создать PDF-файл из строки HTML.

use Spatie\LaravelPdf\Facades\Pdf; 
Pdf::html('<h1>Hello world!!</h1>')->save('/some/directory/invoice.pdf');

PHP

Ответ с помощью PDF файла в Laravel

В контроллере вы можете создать и вернуть PDF-файл, используя эту pdf()функцию.

use function Spatie\LaravelPdf\Support\pdf; 
class DownloadInvoiceController 
{ 
 public function __invoke(Invoice $invoice) 
 { 
    return pdf()->view('pdf.invoice', compact('invoice'))->name('invoice-2023-04-10.pdf'); 
 } 
}

PHP

По умолчанию PDF-файл будет встроен в браузер. Это означает, что PDF-файл будет отображаться в браузере, если браузер его поддерживает. Если пользователь попытается загрузить PDF-файл, он будет называться «invoice-2023-04-10.pdf». Мы рекомендуем всегда давать PDF-файлам имя.

Вы можете использовать этот download()метод для принудительной загрузки PDF-файла.

use function Spatie\LaravelPdf\Support\pdf; 
class DownloadInvoiceController 
{ 
 public function __invoke(Invoice $invoice) 
 {
  return pdf()->view('pdf.invoice', compact('invoice'))->name('invoice-2023-04-10.pdf')->download(); 
 } 
}

PHP

Использование JavaScript в PDF файлах на Laravel

JavaScript в вашем HTML будет выполняться Chrome при создании PDF-файла. Вы можете использовать это, чтобы библиотека диаграмм JavaScript отображала диаграмму.

Вот простой пример. Если у вас есть этот вид Блэйда…

<div id="target"></div> 
<script> document.getElementById('target').innerHTML = 'hello'; </script>

HTML

… и визуализируем его с помощью этого кода…

use Spatie\LaravelPdf\Facades\Pdf; 
Pdf::view('your-view')->save($pathToPdf);

PHP

… текст helloбудет виден в PDF.

Тестирование PDF файлов

Создание PDF-файла может быть медленным, поскольку необходимо запустить весь экземпляр Chrome. В ваших тестах эта медлительность может раздражать. Вот почему в комплект поставки входит подделка в формате PDF. При использовании этой подделки не будет генерироваться PDF-файл, и ваши тесты будут выполняться быстрее.

// in your test 
use Spatie\LaravelPdf\Facades\Pdf; 
beforeEach(function () { Pdf::fake(); });

PHP

Если генерация PDF-файла подделана, вы можете использовать некоторые мощные методы проверки.

Вы можете использовать этот assertSavedметод, чтобы подтвердить, что PDF-файл был сохранен с определенными свойствами. Вы должны передать ему вызываемый объект, который получит экземпляр Spatie\LaravelPdf\PdfBuilder. Если вызываемый объект возвращает true, утверждение пройдет.

use Spatie\LaravelPdf\Facades\Pdf; 
use Spatie\LaravelPdf\PdfBuilder; 
Pdf::assertSaved(function (PdfBuilder $pdf) { 
 return $pdf->downloadName === 'invoice.pdf' && str_contains($pdf->html, 'Your total for April is $10.00')); 
});

PHP

Этот assertRespondedWithPdfметод можно использовать для подтверждения того, что PDF-файл был создан и возвращен в качестве ответа.

Представьте, что у вас есть этот маршрут:

use Spatie\LaravelPdf\Facades\Pdf; 
Route::get('download-invoice', function () { return pdf('pdf.invoice')->download('invoice-for-april-2022.pdf'); });

PHP

В тесте для этого маршрута вы можете использовать , assertRespondedWithPdfчтобы убедиться, что PDF-файл был создан и возвращен в качестве загрузки. Вы даже можете делать утверждения о содержании PDF-файла.

use Spatie\LaravelPdf\Facades\Pdf; 
use Spatie\LaravelPdf\PdfBuilder; 
it('can download an invoice', function () { 
 $this->get('download-invoice')->assertOk(); 
 Pdf::assertRespondedWithPdf(function (PdfBuilder $pdf) { 
  return $pdf->downloadName === 'invoice-for-april-2022.pdf' && $pdf->isDownload() && str_contains($pdf->html, 'Your total for April is $10.00')); 
 }); 
});

PHP

Создание PDF файлов на AWS Lambda

Локальное создание PDF-файлов может оказаться ресурсоемким. Если вам необходимо создать много PDF-файлов или у вас возникли проблемы с установкой необходимых зависимостей на вашем сервере, вы можете рассмотреть возможность использования AWS Lambda для создания PDF-файлов.

Чтобы создавать PDF-файлы в AWS Lambda, вам необходимо установить эти два пакета в свое приложение.

  • Hammerstone/sidecar : это позволяет вам выполнять функции AWS Lambda из вашего приложения Laravel.

  • wnx/sidecar-browsershot : этот пакет содержит версию Browsershot, которую можно запустить на AWS Lambda через Sidecar.

Установив эти два пакета, вы можете создавать PDF-файлы на AWS Lambda следующим образом:

Pdf::view('pdf.invoice', $data)->generateOnLambda()->save('invoice.pdf');

PHP

Если вы хотите создавать все PDF-файлы в своем приложении на Lambda, вы можете установить его по умолчанию следующим образом:

// typically, in a service provider 
Pdf::default()->generateOnLambda();

Подписаться на рассылку

Статья: "Создание pdf в Laravel 10+. Новый пакет laravel-pdf от Spatie."

Понравилась статья "Создание pdf в Laravel 10+. Новый пакет laravel-pdf от Spatie."? Получайте информацию первыми о последних трендах в сфере веб-разработки и SEO-оптимизации, AI и дизайне, подписавшись на нашу email рассылку, оставив почту. Обещаем, никакого спама.

Автор статьи

Мы стараемся делать статьи максимально полезными и информативными

Автор статьи
Никита Ив (Full-stack web-developer)

Спасибо за прочтение статьи "Создание pdf в Laravel 10+. Новый пакет laravel-pdf от Spatie.", если статья показалась вам полезной, можете поделиться ею с друзьями и коллегами. Также, можете подписаться на Email-рассылку, обещаю регулярно отправлять вам полезную информацию, статьи и никакого спама.

Немного расскажу о себе, являюсь full-stack разработчиком и основателем проекта webseed.ru. Более 7-ми лет создаю веб-сайты, приложения, личные кабинеты, CRM, админки, магазины, интеграции и многое другое. За годы работы с клиентами, я приобрел огромный опыт в разработке и создании веб-проектов, что позволяет мне предлагать качественные и современные решения для наших клиентов и делиться полезным опытом.

Наши услуги

Создание и ведение сайтов, аудит, SEO и многое другое

Все услуги

Другие статьи

Полезные статьи о создании и продвижении сайтов, AI, дизайне и трендах в веб-разработке

О нас

Информация о компании

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

За всё время работы, нами были воплощены в жизнь IT-проекты в финансово-кредиторном и автомобильном секторе, в сфере отдыха, туризма и услуг, онлайн-торговле, электронной коммерции, строительства и ИИ.

Прокачайте онлайн-направление Вашего бизнеса и выведите его на совершенно иной уровень, вместе с Webseed.ru

  • Заказов и проектов100+30% за последний год
  • Бизнес отраслей10На данный момент
  • 90%Клиентовпо рекомендациям
Все достижения
О компании Webseed.ru

Контакты

Наш адрес, контакты для связи и мессенджеры

Контакты (в Челнах)

Данные о компании

  • ИП: Иванов Никита Эдуардович
  • ИНН: 165036260002
  • ОГРНИП: 325169000241540
  • Банк: ООО "Банк Точка"
  • БИК: 044525104
  • Корр. счет: 30101810745374525104
  • Расчетный счет: 40802810520000814743
  • Адрес банка: 109044, Российская Федерация, г. Москва, вн.тер.г. муниципальный округ Южнопортовый, пер. 3-й Крутицкий, д.11, помещ. 7Н
Карта партнера
КонтактыГлавнаяУслугиTelegram