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

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

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

Генерация 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();
Никита Ив
Никита ИвРазработчик и руководитель команды разработки Вебсид

Добрый вечер. Готов лично обсудить ваш проект или задачу. Оставьте контакты, я отвечу в течение 15 минут.

  • Помогу составить ТЗ
  • Подготовлю КП за 1 день
  • Опыт 10+ лет в разработке и SEO
Последняя заявка отправлена 0 мин. назад
либо свяжитесь со мной

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

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

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

Вступайте в наш Telegram канал, чтобы получать пуш уведомления о новых публикациях и быть частью растущего сообщества!

Вы можете заказать данную услугу у нас, нажав соответствующую кнопку ниже

Автор статьи

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

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

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

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

Наши услуги

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

Все категории

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

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

Все категории
О нас / Информация о компании

Цифровые решения для бизнеса: Сайты, SEO и ИИ-агенты

Создаем высококонверсионные веб-проекты, продвигаем в поисковиках и нейросетях, внедряем AI-ассистентов по всей России и СНГ

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

Ключевое направление нашей практики — разработка и продвижение сайтов, а также разработка и интеграция ИИ-агентов. Мы создаем умных нейросетевых ассистентов для сервиса клиентов, обработки входящих лидов и автоматизации рутины, связывая их с CRM, ERP, мессенджерами и внешними базами знаний.

За время работы нами успешно реализованы IT-проекты в сфере финансово-кредитных услуг, автобизнеса, туризма, e-commerce, ритейла, строительства и искусственного интеллекта.

О компании Webseed.ru
Команда Webseed
Разработка & AI

Webseed в цифрах и фактах

100+
Реализованных IT-проектов
+30% прирост за последний год
10+
Отраслей бизнеса
Авто, Финансы, E-commerce, Туризм и др.
90%
Клиентов по рекомендациям
Высокое доверие и LTV клиентов
7+ лет
Опыта разработки и SEO
Экспертиза в сложных веб-системах
+150%
Прирост целевого трафика
Органические лиды из Поиска и AI
100%
Гарантия по договору
Официальная ответственность и ЭДО
Официальный договор и ЭДО

Прозрачное юридическое оформление (ИП Иванов Н. Э., ИНН 165036260002). Быстрый обмен документами через Диадок и СБИС.

Поэтапная оплата и гарантии

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

Работа в вашем часовом поясе

Оперативная связь, созвоны в Google Meet / Zoom и еженедельные спринт-отчеты независимо от вашего региона (UTC+2...UTC+12).

Готовы запустить цифровую трансформацию?

Свяжитесь с нами для бесплатной консультации и точного расчета стоимости проекта

Достижения

Контакты

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

Контакты

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

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