Ga naar inhoud

Snelstart — je eerste PDF in CodeIgniter 4

Resolve de pdf-service in een controller, voeg inhoud toe aan het document en retourneer een downloadrespons. Zo krijg je in drie regels en één Hypertext Transfer Protocol (HTTP)-respons een Portable Document Format (PDF)-bestand.

Terminal window
composer require nextpdf/codeigniter

Zie /integrations/codeigniter/install/ voor de vereisten en controles op pakketdetectie.

Maak een controller die een PDF retourneert. De Pdf-bibliotheek maakt een nieuw document voor je en zet dat vervolgens om in een CodeIgniter-DownloadResponse.

In elk PHP-voorbeeld op deze pagina staat declare(strict_types=1); na de openingstag, op een eigen regel (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() retourneert een nieuwe Pdf. De functionele testsuite van het pakket controleert daarnaast dat het onderliggende document bij elke aanroep nieuw is. Een aanroep van download() levert een DownloadResponse op met de attachment-dispositie.

Koppel een route aan de controllermethode in app/Config/Routes.php:

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

Open /invoices/42/pdf. Je browser downloadt invoice-42.pdf. De respons bevat Content-Type: application/pdf en de hardeningheaders van het pakket.

Variant — inline-voorvertoning met de helper

Sectie met titel “Variant — inline-voorvertoning met de helper”

De globale pdf()-helper is gelijkwaardig aan Services::pdf(). Roep inline() aan om de PDF in de browser te tonen in plaats van die te downloaden:

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

Variant — rechtstreeks document en PdfResponse

Sectie met titel “Variant — rechtstreeks document en PdfResponse”

Als je al een Document hebt, bouw je de respons rechtstreeks met PdfResponse. De pdf_document()-helper geeft je een nieuw, vooraf geconfigureerd 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');
}
}
  • Een controller die een NextPDF-service resolvet en een getypeerde DownloadResponse retourneert.
  • Twee gelijkwaardige toegangspunten: de Services-klasse en de pdf() / pdf_document()-helpers.
  • Een respons met application/pdf, de beveiligingsheaders van het pakket en een opgeschoonde bestandsnaam.

Om deze eerste introductie gericht te houden, laat deze tutorial foutafhandeling buiten beschouwing. Voor productiecontrollers met dependency injection, exception-afhandeling, observability en de queue-job ga je verder naar /integrations/codeigniter/production-usage/. Die pagina toont je de geharde varianten.

  • PHP-openingstag op een eigen regel in codevoorbeelden (PSR-12 Extended Coding Style §x1.x3.p11).
  • declare(strict_types=1)-statementvorm in codevoorbeelden (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — het volledige application programming interface (API)-oppervlak.
  • /integrations/codeigniter/configuration/ — wijzig de standaardwaarden en paden.
  • /integrations/codeigniter/production-usage/ — productiewaardige controllers en asynchrone jobs.
  • /integrations/codeigniter/troubleshooting/ — wanneer een route geen PDF retourneert.