Перейти к содержимому

Справочник API для Laravel

Пакет nextpdf/laravel связывает независимое от фреймворка ядро NextPDF с приложением Laravel. Вы работаете напрямую с четырьмя точками входа: фасадом Pdf для коротких сценариев создания документов, привязкой контейнера PdfDocumentInterface для создания документов через внедрение зависимостей, вспомогательным классом PdfResponse для HTTP-ответов на основе готовых документов и заданием очереди GeneratePdfJob для генерации за пределами запроса. Поставщик NextPdfServiceProvider регистрирует каждую привязку и обнаруживается автоматически, поэтому ручная настройка не требуется. Конфигурация в config/nextpdf.php управляет значениями по умолчанию, шрифтами, очередями, а также дополнительной подписью и службой меток времени (TSA).

Для быстрого старта: чтобы отправить PDF-файл прямо из контроллера, создайте документ и верните PdfResponse::download($document, 'file.pdf'). Это показано в первом примере ниже.

Приведённые ниже фрагменты охватывают три процесса, с которых обычно начинают работу. Каждый фрагмент проверен по исходному коду пакета; полные таблицы по каждому API-символу приведены далее.

Возврат PDF для скачивания из контроллера. Это самая распространённая задача:

<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Laravel\Http\PdfResponse;
final class ReportController extends Controller
{
public function download(PdfDocumentInterface $document): Response
{
$document->addPage();
$document->cell(0, 10, 'Monthly report', newLine: true);
return PdfResponse::download($document, 'report.pdf');
}
}

Что делает этот код: внедряет новый документ, записывает одну строку и возвращает ответ attachment с Content-Type: application/pdf и заголовками безопасности Open Worldwide Application Security Project (OWASP). Используйте inline() вместо download(), чтобы открыть предпросмотр в браузере.

Создание и сохранение с помощью фасада Pdf. Это самый короткий путь для скриптов и простых сценариев:

<?php
declare(strict_types=1);
use NextPDF\Laravel\Facades\Pdf;
Pdf::addPage();
Pdf::cell(0, 10, 'Hello from Laravel', newLine: true);
Pdf::save(storage_path('app/hello.pdf'));

Что делает этот код: фасад получает новый документ из контейнера, записывает одну ячейку и сохраняет готовый PDF на диск.

Генерация PDF вне потока запроса с помощью GeneratePdfJob:

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Laravel\Jobs\GeneratePdfJob;
GeneratePdfJob::dispatch(
storage_path('app/reports/january-2026.pdf'),
static fn (PdfDocumentInterface $document): PdfDocumentInterface => $document
->addPage()
->cell(0, 10, 'January report', newLine: true),
);

Что делает этот код: ставит генерацию в очередь на воркере. Замыкание-конструктор получает документ из контейнера и возвращает его. Задание проверяет путь вывода .pdf перед сохранением. Имя очереди, тайм-аут и подключение берутся из config('nextpdf.queue.*').

Фасад Pdf статически проксирует вызовы к новому объекту ядра Document. Используйте его в коротких сценариях контроллера, когда статический стиль вызовов уместен. Каждая строка описывает один проксируемый метод документа.

СимволПараметрыПоведение по умолчаниюВозвращаетИсключения и сбоиПримечания
NextPDF\Laravel\Facades\Pdfнет; статический акцессор фасада получает NextPDF\Contracts\PdfDocumentInterfaceLaravel получает текущую привязку контейнера для интерфейса документа.API для цепочки вызовов нижележащего документа ядра.Сбой привязки контейнера Laravel, если поставщик не зарегистрирован.Используйте его в коротких сценариях контроллера. Для сервисов и заданий предпочитайте внедрение через конструктор.
Pdf::setTitle(string $title)title: заголовок документа.Заменяет любой существующий заголовок.staticОшибки проверки ядра или ошибки во время записи.Проксирует в ядро Document.
Pdf::setAuthor(string $author)author: метаданные автора документа.Заменяет предыдущего автора.staticОшибки проверки метаданных ядра.Для метаданных уровня приложения предпочитайте настроенные значения по умолчанию.
Pdf::addPage(?PageSize $size = null, Orientation $orientation = Portrait)size: необязательный размер страницы; orientation: по умолчанию Portrait.Использует настроенный размер страницы или размер по умолчанию, если size опущен.staticОшибки проверки страницы ядра.Указывайте явный PageSize, когда размер вывода важен.
Pdf::setFont(string $family, string $style = '', float $size = 12.0)Семейство шрифта, начертание и размер в пунктах.Использует пустое начертание и размер 12 пт.staticОшибки реестра шрифтов или кодировки.Предварительно загружайте рабочие шрифты через nextpdf.preload_fonts, когда важна задержка.
Pdf::cell(float $width, float $height, string $text = '', bool $border = false, bool $newLine = false, Alignment $align = Left)Размеры ячейки, текст, флаг рамки, флаг переноса строки и выравнивание.Использует пустой текст, без рамки, без переноса строки и выравнивание по левому краю.staticОшибки макета или кодировки текста.Используйте для простого вывода с фиксированным макетом.
Pdf::multiCell(float $width, float $height, string $text, bool $border = false, Alignment $align = Left)Ширина ячейки, высота строки, текст, флаг рамки, выравнивание.Без рамки и с выравниванием по левому краю.staticОшибки макета или кодировки текста.Используйте, когда текст должен переноситься в пределах фиксированной ширины.
Pdf::writeHtml(string $html)html: фрагмент HTML.Отрисовывает на текущей странице и создаёт её при необходимости.staticОшибки отрисовки HTML в ядре.Применяйте политики размера ввода и ресурсов перед приёмом недоверенного HTML.
Pdf::image(string $file, ?float $x = null, ?float $y = null, ?float $width = null, ?float $height = null)Путь к файлу и необязательный прямоугольник размещения.Позволяет документу ядра выбрать текущую позицию и естественный размер, когда координаты опущены.staticОшибки декодирования изображения, пути или макета.Проверяйте политику источника изображения перед приёмом путей, заданных пользователем.
Pdf::output(?string $filename = null, OutputDestination $dest = Inline)filename: необязательное имя; dest: назначение вывода.Выводит inline, когда назначение опущено.stringОшибки сериализации ядра.Для HTTP-ответов Laravel предпочитайте PdfResponse.
Pdf::save(string $path)path: целевой путь в файловой системе.Записывает готовый PDF на диск.voidОшибки файловой системы или ошибки записи ядра.Проверяйте каталоги вывода в коде приложения.
Pdf::getPdfData()нет.Формирует байты PDF в памяти.stringОшибки сериализации ядра.Используйте, когда телом ответа должен владеть другой объект фреймворка.

Используйте эту таблицу, когда нужно напрямую получить или переопределить запись контейнера, например внедрить DocumentFactoryInterface в сервис или проверить, какие отложенные сервисы объявляет provides().

СимволПараметрыПоведение по умолчаниюВозвращаетИсключения и сбоиПримечания
NextPdfServiceProvider::register()нет.Объединяет config/nextpdf.php; регистрирует реестры, фабрику документов, привязку документа, HTTP-клиент, клиент TSA, компонент подписи и необязательные контракты электронных счетов.voidОшибки разрешения контейнера или необязательного класса, если используется необязательная функция.FontRegistryInterface и ImageRegistry используются совместно; документы всегда создаются заново.
NextPdfServiceProvider::boot()нет.Проверяет обязательные расширения PHP и публикует nextpdf-config в консольном режиме.voidRuntimeException, если обязательное расширение недоступно.Обязательные расширения — mbstring и zlib.
NextPdfServiceProvider::provides()нет.Возвращает идентификаторы отложенных сервисов.array<string>Не ожидается.Включает PdfDocumentInterface, DocumentFactoryInterface, FontRegistryInterface, SignerInterface, TsaClient, ClientInterface и nextpdf.
PdfDocumentInterface / nextpdfполучается из контейнера Laravel.Создаёт одноразовый Document через DocumentFactoryInterface, затем применяет настроенные значения по умолчанию и необязательные параметры PDF/A или Artisan.NextPDF\Core\DocumentОшибки необязательного расширения, если оно настроено, но недоступно.Получайте новый документ для каждого запроса или задания.
DocumentFactoryInterfaceполучается из контейнера Laravel.Фабрика-синглтон, которая использует общие реестры шрифтов и изображений на время жизни процесса.DocumentFactoryInterfaceОшибки настройки реестра.Используйте для явного внедрения зависимостей.
SignerInterfaceполучается из контейнера Laravel.Возвращает null, если nextpdf.signature.enabled не включён и пути к сертификатам не настроены.`SignerInterfacenull`Ошибки загрузки сертификата или проверки уровня подписи.

Используйте эту таблицу для поиска ключей nextpdf.*, которые относятся к среде выполнения и читаются привязками. Полный справочник по каждому ключу, включая переменные окружения и значения по умолчанию, доступен по адресу /integrations/laravel/configuration/.

КлючТипПоведение по умолчаниюПримечания
nextpdf.fonts_pathstringЕсли опущен, использует шрифты ресурсов Laravel.Каталог для пользовательских шрифтов и прогрева.
nextpdf.cache_pathstringПуть к кешу приложения.Убедитесь, что воркер PHP имеет право записи.
nextpdf.preload_fontslist<string>Пустой список.Прогревает шрифты при создании реестра; после этого реестр блокируется.
nextpdf.image_cache_mbintОграниченный размер кеша изображений.Ограничивает память кеша изображений на время жизни процесса.
nextpdf.defaults.*arrayСоздатель NextPDF, язык en, необязательные значения по умолчанию для автора и макета.Применяется к каждому новому документу.
nextpdf.artisan.*arrayРендерер Chrome отключён, если он не установлен и не настроен.Сопоставляется с ChromeRendererConfig::fromArray().
nextpdf.signature.*arrayПодпись по умолчанию отключена.Сертификат, закрытый ключ, пароль, дополнительные сертификаты и уровень подписи.
nextpdf.tsa.*arrayTSA отключена, если URL пуст.Поддерживает учётные данные, файлы для взаимной TLS-аутентификации (mTLS), тайм-аут, привязки открытых ключей и политику HTTP.
nextpdf.ocsp_cache.*arrayКеш протокола OCSP включён с настроенным TTL.Используется процессами проверки подписи, когда доступен.

Используйте эту таблицу, когда возвращаете готовый документ по HTTP и нужно выбрать отображение inline, загрузку как вложение или потоковый вывод.

СимволПараметрыПоведение по умолчаниюВозвращаетИсключения и сбоиПримечания
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: готовый документ; filename: имя файла для Content-Disposition.Нормализует пустые имена файлов до document.pdf.Illuminate\Http\ResponseОшибки сериализации ядра или ошибки построения ответа.Устанавливает тип содержимого PDF и защитные заголовки.
PdfResponse::download(Document $document, string $filename = 'document.pdf')То же, что inline; disposition — attachment.Возвращает ответ для загрузки в браузере.Illuminate\Http\ResponseТо же, что inline.Используйте для явной загрузки файлов.
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')То же, что inline.Формирует байты PDF, затем выдаёт фрагменты по 64 КБ.Symfony\Component\HttpFoundation\StreamedResponseТо же, что inline.Это потоковый HTTP-вывод, а не отрисовка без копирования.
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')То же, что streamInline; disposition — attachment.Ответ для потоковой загрузки.StreamedResponseТо же, что streamInline.Применяйте ограничения размера ввода и вывода перед отрисовкой.

Используйте эту таблицу, когда выносите генерацию из потока обработки запроса. Она охватывает создание, диспетчеризацию, а также обратные вызовы при успехе или сбое для GeneratePdfJob.

СимволПараметрыПоведение по умолчаниюВозвращаетИсключения и сбоиПримечания
new GeneratePdfJob(string $outputPath, callable $builder, ?callable $onSuccess = null, ?callable $onFailure = null)outputPath: целевой .pdf; builder: получает PdfDocumentInterface; обратные вызовы необязательны.Имя очереди, тайм-аут и подключение читаются из config('nextpdf.queue.*').Экземпляр задания.Ошибки сериализации, если конструктор или обратные вызовы не удаётся сериализовать.Конструктор должен вернуть настроенный документ.
GeneratePdfJob::handle()нет.Получает PdfDocumentInterface, применяет конструктор, проверяет путь вывода, затем сохраняет.voidInvalidArgumentException для небезопасных путей вывода; ошибки записи ядра.Отклоняет обёртки потоков, нулевые байты, сегменты .. и пути без .pdf.
GeneratePdfJob::failed(Throwable $exception)exception: причина сбоя.Вызывает настроенный обратный вызов сбоя, если он задан.voidСбои обратного вызова.Делайте обратные вызовы идемпотентными.
GeneratePdfJob::then(callable $callback)callback: получает путь вывода.Заменяет обратный вызов успеха.selfОшибки сериализации замыкания.Помощник для цепочки вызовов при настройке диспетчеризации.
GeneratePdfJob::catch(callable $callback)callback: получает выброшенный Throwable.Заменяет обратный вызов сбоя.selfОшибки сериализации замыкания.Используйте для оповещения или компенсирующей очистки.
  • PdfResponse всегда вызывает getPdfData() перед построением ответа. Это не ленивый построитель документов.
  • Данные задания в общих транспортах могут быть подменены; ограничивайте пути вывода каталогом, принадлежащим приложению.
  • Используйте новый документ для каждого запроса или задания. Не используйте один документ повторно между запросами.