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

Быстрый старт — первый PDF в CodeIgniter 4

Получите сервис pdf в контроллере, добавьте содержимое в документ и верните ответ для скачивания. Так вы получите файл Portable Document Format (PDF) в три строки и одним ответом по протоколу Hypertext Transfer Protocol (HTTP).

Окно терминала
composer require nextpdf/codeigniter

Требования и проверки обнаружения пакета описаны в /integrations/codeigniter/install/.

Создайте контроллер, который возвращает PDF. Библиотека Pdf создаёт новый документ и преобразует его в объект CodeIgniter DownloadResponse.

Во всех примерах PHP на этой странице declare(strict_types=1); размещается после открывающего тега, в отдельной строке (PSR-12 §x1.x3.p11; §x1.x3.p34).

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
use NextPDF\CodeIgniter\Config\Services;
final class InvoiceController extends BaseController
{
public function download(int $id): DownloadResponse
{
$pdf = Services::pdf();
$pdf->document()->addPage();
$pdf->document()->cell(0, 10, "Invoice #{$id}");
return $pdf->download("invoice-{$id}.pdf");
}
}

Services::pdf() возвращает новый Pdf. Набор функциональных тестов пакета также проверяет, что его внутренний документ создаётся заново при каждом вызове. Вызов download() создаёт DownloadResponse с disposition attachment.

Свяжите маршрут с методом контроллера в файле app/Config/Routes.php:

$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');

Откройте /invoices/42/pdf. Браузер скачает invoice-42.pdf. Ответ содержит Content-Type: application/pdf и добавленные пакетом заголовки для усиления безопасности ответа.

Вариант — встроенный предпросмотр с помощью хелпера

Заголовок раздела «Вариант — встроенный предпросмотр с помощью хелпера»

Глобальный хелпер pdf() эквивалентен Services::pdf(). Вызовите inline(), чтобы показать PDF в браузере, а не скачивать его:

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
final class ReportController extends BaseController
{
public function preview(): DownloadResponse
{
$pdf = pdf();
$pdf->document()->addPage();
$pdf->document()->cell(0, 10, 'Monthly Report');
return $pdf->inline('report.pdf');
}
}

Если у вас уже есть Document, сформируйте ответ напрямую с помощью PdfResponse. Хелпер pdf_document() возвращает новый, предварительно настроенный документ.

<?php
declare(strict_types=1);
namespace App\Controllers;
use CodeIgniter\HTTP\DownloadResponse;
use NextPDF\CodeIgniter\Http\PdfResponse;
final class DocumentController extends BaseController
{
public function generate(): DownloadResponse
{
$document = pdf_document();
$document->addPage();
$document->cell(0, 10, 'Hello World');
return PdfResponse::download($document, 'hello.pdf');
}
}
  • Контроллер, который получает сервис NextPDF и возвращает типизированный DownloadResponse.
  • Две равнозначные точки входа: класс Services и хелперы pdf() / pdf_document().
  • Ответ с application/pdf, заголовками безопасности пакета и очищенным именем файла.

Чтобы сохранить фокус первого знакомства, в этом руководстве не рассматривается обработка ошибок. О контроллерах эксплуатационного уровня с внедрением зависимостей, обработкой исключений, наблюдаемостью и задачей в очереди см. в /integrations/codeigniter/production-usage/. На этой странице приведены защищённые варианты.

  • Открывающий тег PHP на отдельной строке в примерах кода (PSR-12 Extended Coding Style §x1.x3.p11).
  • Форма инструкции declare(strict_types=1) в примерах кода (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — полная поверхность API.
  • /integrations/codeigniter/configuration/ — изменение значений по умолчанию и путей.
  • /integrations/codeigniter/production-usage/ — контроллеры эксплуатационного уровня и асинхронные задачи.
  • /integrations/codeigniter/troubleshooting/ — если маршрут не возвращает PDF.