Быстрый старт — первый PDF в CodeIgniter 4
Коротко
Заголовок раздела «Коротко»Получите сервис pdf в контроллере, добавьте содержимое в документ и верните ответ для скачивания. Так вы получите файл Portable Document Format (PDF) в три строки и одним ответом по протоколу Hypertext Transfer Protocol (HTTP).
Установка
Заголовок раздела «Установка»composer require nextpdf/codeigniterТребования и проверки обнаружения пакета описаны в /integrations/codeigniter/install/.
Шаг 1 — создание контроллера
Заголовок раздела «Шаг 1 — создание контроллера»Создайте контроллер, который возвращает 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.
Шаг 2 — добавление маршрута
Заголовок раздела «Шаг 2 — добавление маршрута»Свяжите маршрут с методом контроллера в файле app/Config/Routes.php:
$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');Шаг 3 — запрос PDF
Заголовок раздела «Шаг 3 — запрос PDF»Откройте /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'); }}Вариант — прямой документ и PdfResponse
Заголовок раздела «Вариант — прямой документ и PdfResponse»Если у вас уже есть 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.