Aller au contenu

Démarrage rapide — ton premier PDF avec CodeIgniter 4

Résous le service pdf dans un contrôleur, ajoute du contenu à son document, puis renvoie une réponse de téléchargement. En pratique, trois lignes suffisent pour produire une seule réponse HTTP.

Fenêtre de terminal
composer require nextpdf/codeigniter

Pour connaître les prérequis et vérifier la découverte du package, consulte /integrations/codeigniter/install/.

Crée un contrôleur qui renvoie un PDF. La bibliothèque Pdf encapsule pour toi un nouveau document, puis transforme ce document en une DownloadResponse CodeIgniter.

Chaque exemple PHP de cette page place declare(strict_types=1); après la balise d’ouverture, sur sa propre ligne (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() renvoie un nouveau Pdf. Son document sous-jacent est également nouveau à chaque appel, comme le vérifie la suite de tests fonctionnels du package. L’appel download() produit une DownloadResponse avec la disposition attachment.

Associe une route à la méthode du contrôleur dans app/Config/Routes.php :

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

Ouvre /invoices/42/pdf. Le navigateur télécharge invoice-42.pdf. La réponse porte Content-Type: application/pdf ainsi que les en-têtes de durcissement fournis par le package.

Le helper global pdf() équivaut à Services::pdf(). Pour afficher le PDF dans le navigateur au lieu de le télécharger, appelle inline() :

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

Quand tu disposes déjà d’un Document, construis la réponse directement avec PdfResponse. Le helper pdf_document() te fournit un nouveau document préconfiguré.

<?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');
}
}
  • Un contrôleur qui résout un service NextPDF et renvoie une DownloadResponse typée.
  • Deux points d’entrée équivalents : la classe Services et les helpers pdf() / pdf_document().
  • Une réponse avec application/pdf et les en-têtes de sécurité du package, ainsi qu’un nom de fichier assaini.

Pour garder cette première introduction lisible, le tutoriel laisse de côté la gestion des erreurs. Pour des contrôleurs de production — injection de dépendances, gestion des exceptions, observabilité et job en file d’attente — continue vers /integrations/codeigniter/production-usage/. Cette page présente les variantes durcies.

  • Balise d’ouverture PHP sur sa propre ligne dans les exemples de code (PSR-12 Extended Coding Style §x1.x3.p11).
  • Forme de l’instruction declare(strict_types=1) dans les exemples de code (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — toute la surface de l’API.
  • /integrations/codeigniter/configuration/ — ajuste les valeurs par défaut et les chemins.
  • /integrations/codeigniter/production-usage/ — des contrôleurs adaptés à la production et des jobs asynchrones.
  • /integrations/codeigniter/troubleshooting/ — quand une route ne renvoie aucun PDF.