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

Справочник API CodeIgniter

Пакет CodeIgniter предоставляет небольшой API для контроллеров. В него входят библиотека-обёртка Pdf для одного документа (Services::pdf() и глобальная pdf()), вспомогательные функции ответа, которые преобразуют готовый документ в DownloadResponse (PdfResponse), Services и стоящие за ними фабрики (реестры шрифтов и изображений, фабрика документов, а также необязательные сервис подписания и клиент службы меток времени (TSA)), класс конфигурации NextPdf и GeneratePdfJob для асинхронной генерации из статических вызываемых построителей.

Начните с основного сценария контроллера: вызовите Services::pdf() (или вспомогательную функцию pdf()), добавьте содержимое в $pdf->document() и верните $pdf->download('file.pdf'). Этот сценарий покрывает самый частый случай. Справочные таблицы сгруппированы по областям API; раздел “Распространённые задачи” сначала показывает готовые к запуску варианты.

Это самые распространённые рабочие сценарии. Каждый пример проверен по исходному коду nextpdf/codeigniter.

Используйте канонический путь отрисовки, чтобы вернуть из контроллера PDF-файл для загрузки в формате PDF (Portable Document Format):

<?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");
}
}

Что делает: создаёт новую обёртку Pdf вокруг нового Document, записывает одну ячейку и возвращает DownloadResponse с attachment и заголовками безопасности пакета.

Чтобы предварительно просмотреть PDF в браузере, используйте ту же обёртку и inline() вместо download():

<?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');
}
}

Что делает: использует глобальную вспомогательную функцию pdf() (эквивалент Services::pdf()) и возвращает DownloadResponse с inline, поэтому браузер показывает PDF, а не скачивает его.

Сгенерируйте PDF асинхронно в очереди с помощью GeneratePdfJob и статического построителя:

<?php
declare(strict_types=1);
use NextPDF\CodeIgniter\Jobs\GeneratePdfJob;
service('queue')->push('pdf', GeneratePdfJob::class, [
'builder' => 'App\PdfBuilders\InvoiceBuilder::build',
'outputPath' => WRITEPATH . 'pdfs/invoice-42.pdf',
'context' => ['invoice_id' => 42],
]);

Что делает: ставит генерацию в очередь. Обработчик проверяет построитель (это должен быть статический вызываемый App\PdfBuilders\...::method) и путь вывода (он должен разрешаться внутри WRITEPATH/pdfs/ и заканчиваться на .pdf), создаёт новый документ и сохраняет его.

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

СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается сПримечания
NextPDF\CodeIgniter\Libraries\Pdf / new Pdf(Document $document)document: новый документ ядра.Оборачивает переданный документ для одной операции ответа или сохранения.PdfНе ожидается.Не используйте обёртку повторно после вывода.
Pdf::document()нет.Возвращает обёрнутый документ.NextPDF\Core\DocumentНе ожидается.Используйте это для вызова API создания документов ядра.
Pdf::inline(string $filename = 'document.pdf')filename: имя файла ответа.Использует встроенное (inline) расположение в браузере.CodeIgniter\HTTP\DownloadResponseОшибки сериализации ядра.Делегирует PdfResponse::inline().
Pdf::download(string $filename = 'document.pdf')filename: имя файла ответа.Использует расположение “вложение” (attachment) в браузере.DownloadResponseОшибки сериализации ядра.Делегирует PdfResponse::download().
Pdf::streamInline(string $filename = 'document.pdf')filename: имя файла ответа.Обеспечивает совместимость API с пакетами других фреймворков.DownloadResponseОшибки сериализации ядра.CodeIgniter обрабатывает двоичный вывод штатно.
Pdf::streamDownload(string $filename = 'document.pdf')filename: имя файла ответа.Обеспечивает совместимость API с пакетами других фреймворков.DownloadResponseОшибки сериализации ядра.Используйте те же средства управления размером, что и для непотоковых ответов.
Pdf::save(string $path)path: целевой путь в файловой системе.Записывает обёрнутый документ.voidОшибки файловой системы или записи ядра.Проверяйте корневые каталоги хранилища перед сохранением.

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

СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается сПримечания
Services::fontRegistry(bool $getShared = true)getShared: флаг общего сервиса CodeIgniter.Возвращает общий реестр, прогревает его настроенными шрифтами, затем блокирует.FontRegistryInterfaceRuntimeException при отсутствии расширений или небезопасном пути к шрифтам.Отклоняет обёртки потоков и нулевые байты в fontsPath.
Services::imageRegistry(bool $getShared = true)getShared: флаг общего сервиса.Возвращает общий ограниченный реестр изображений по принципу вытеснения наименее недавно использованных (LRU).ImageRegistryНе ожидается.Размер кэша управляется параметром imageCacheMb.
Services::documentFactory(bool $getShared = true)getShared: флаг общего сервиса.Возвращает общую фабрику, использующую общие реестры.DocumentFactoryInterfaceОшибки настройки реестра.Фабрику можно использовать повторно, документы — нет.
Services::tsaClient(bool $getShared = true)getShared: флаг общего сервиса.Возвращает null, когда tsa.url пуст.`TsaClientnull`Ошибки HTTP-клиента или конфигурации TSA.
Services::pdfSigner(bool $getShared = false)getShared: флаг общего сервиса.Возвращает null, когда подписание отключено.`SignerInterfacenull`Ошибки сертификата или уровня подписи.
Services::pdfDocument(bool $getShared = false)getShared: флаг общего сервиса.Создаёт новый документ, применяет значения по умолчанию и при необходимости настраивает PDF/A или Artisan.DocumentОшибки необязательного расширения или конфигурации документа.Сохраняйте значение по умолчанию false для безопасности запроса.
Services::pdf(bool $getShared = false)getShared: флаг общего сервиса.Создаёт новую обёртку Pdf вокруг нового документа.NextPDF\CodeIgniter\Libraries\PdfОшибки настройки документа.Основной сервис для контроллеров.
Services::eInvoiceEmbedder()нет.Возвращает null, если класс встраивания электронных счетов из Premium Pro недоступен.`EmbedderInterfacenull`Ошибки создания необязательного пакета.
Services::eInvoiceValidator()нет.Возвращает null, если класс валидатора из Premium Enterprise недоступен.`ValidatorInterfacenull`Ошибки создания необязательного пакета.
Services::eInvoiceProfile()нет.Возвращает профиль EN16931, когда установлен Premium Pro.`ProfileInterfacenull`Ошибки необязательного пакета.
Services::schematronRunner()нет.Возвращает null, если класс валидатора Schematron из Premium Enterprise недоступен.`SchematronRunnerInterfacenull`Ошибки создания необязательного пакета.
Registrar::Autoload()нет.Добавляет вспомогательную функцию пакета в конфигурацию автозагрузки CodeIgniter.arrayНе ожидается.Включает pdf() и pdf_document(), когда модуль загружен.
pdf()нет.Вызывает Services::pdf(false).PdfОшибки настройки документа.Удобная вспомогательная функция для контроллеров.
pdf_document()нет.Вызывает Services::pdfDocument(false).DocumentОшибки настройки документа.Удобная вспомогательная функция, когда предпочтительнее API документа ядра.

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

СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается сПримечания
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: готовый документ; filename: имя файла ответа.Обеспечивает расширение .pdf и встроенное (inline) расположение.DownloadResponseОшибки сериализации ядра.Добавляет тип содержимого PDF и защитные заголовки.
PdfResponse::download(Document $document, string $filename = 'document.pdf')Так же, как inline; расположение — “вложение” (attachment).Обеспечивает расширение .pdf.DownloadResponseТак же, как inline.Используйте для загрузок в браузере.
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')Так же, как inline.Поведение такое же, как у inline в CodeIgniter 4 (CI4).DownloadResponseТак же, как inline.Существует для совместимости API между фреймворками.
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')Так же, как download.Поведение такое же, как у download в CI4.DownloadResponseТак же, как download.Существует для совместимости API между фреймворками.

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

СимволПараметрыПоведение по умолчаниюВозвращаетВыбрасывает или завершается сПримечания
GeneratePdfJob::process()Ключи данных задания: builder, outputPath и необязательный context.Если контекст отсутствует, использует пустой массив.voidInvalidArgumentException при небезопасном построителе или пути вывода; ошибки записи ядра.Построитель должен быть App\PdfBuilders\...\*::method.
Вызываемый построительDocument $doc, array $context.По умолчанию контекста нет, кроме данных задания.DocumentИсключения, специфичные для построителя.Требует статического вызываемого, поскольку полезные нагрузки очереди CI4 — это сериализованные данные.

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

СвойствоТипПоведение по умолчаниюПримечания
pageFormatstringA4.Задаёт формат страницы по умолчанию.
orientationstringP.Задаёт ориентацию по умолчанию.
unitstringmm.Задаёт единицу измерения по умолчанию.
pdfa`stringnull`null.
fontsPath / cachePathstringWRITEPATH . 'fonts' и WRITEPATH . 'cache/nextpdf'.Храните пути внутри хранилища, контролируемого приложением.
signaturearrayОтключено с уровнем B-B.Сертификат, ключ, пароль, дополнительные сертификаты и уровень.
tsaarrayОтключено, когда URL равен null; тайм-аут 30 секунд.Учётные данные, файлы взаимного TLS (mTLS), привязки открытых ключей и политика HTTP.
ocspCachearrayВключено со временем жизни (TTL) 86400 секунд.Используется при наличии в процессах проверки подписи.
preloadFontslist<string>Пусто.Прогревается перед блокировкой реестра.
imageCacheMbint50.Управляет кэшем изображений на время жизни процесса.
fontCacheLockingbooltrue.Удерживает изменения реестра шрифтов вне обработки запроса.
artisanarrayОтрисовщик Chrome отключён, пока не настроен и не установлен.Сопоставляется с ChromeRendererConfig::fromArray().
defaultsarrayСоздатель NextPDF, пустой автор, язык en, поля по умолчанию и шрифт по умолчанию.Services::pdfDocument() применяет только creator, language и (если не пусто) author; margin_top/right/bottom/left, font_family, font_size, trim_box и bleed_box заданы как значения по умолчанию, но в настоящее время не применяются.
  • GeneratePdfJob ограничивает вывод каталогом WRITEPATH . 'pdfs' и требует .pdf.
  • Вызываемые построители за пределами App\PdfBuilders отклоняются, чтобы исключить произвольное выполнение кода из изменённых полезных нагрузок очереди.
  • Используйте service('pdf') или вспомогательную функцию пакета в потоках контроллера; для длительной генерации используйте задания очереди.