Salta ai contenuti

Avvio rapido — il primo PDF in CodeIgniter 4

Risolvere il servizio pdf in un controller, aggiungere contenuto al documento associato e restituire una risposta di download: tre righe di lavoro e una sola risposta HTTP.

Terminal window
composer require nextpdf/codeigniter

Per verificare i requisiti e il rilevamento del pacchetto, vedere /integrations/codeigniter/install/.

Creare un controller che restituisce un PDF. La libreria Pdf incapsula un nuovo documento per chi la usa, quindi trasforma quel documento in un DownloadResponse di CodeIgniter.

Ogni esempio PHP in questa pagina dichiara declare(strict_types=1); dopo il tag di apertura, su una riga a sé (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() restituisce una nuova istanza di Pdf. Anche il documento sottostante è nuovo a ogni chiamata, come verificato dalla suite di test funzionali del pacchetto. La chiamata download() produce un DownloadResponse con disposition attachment.

Mappare una route al metodo del controller in app/Config/Routes.php:

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

Aprire /invoices/42/pdf. Il browser scarica invoice-42.pdf. La risposta include Content-Type: application/pdf e le intestazioni di hardening applicate dal pacchetto alla risposta.

L’helper globale pdf() è equivalente a Services::pdf(). Per visualizzare il PDF nel browser anziché scaricarlo, chiamare 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');
}
}

Quando si dispone già di un Document, creare la risposta direttamente con PdfResponse. L’helper pdf_document() fornisce un nuovo documento preconfigurato.

<?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 controller che risolve un servizio NextPDF e restituisce un DownloadResponse con tipo dichiarato.
  • Due punti di ingresso equivalenti: la classe Services e gli helper pdf() / pdf_document().
  • Una risposta che include application/pdf e le intestazioni di sicurezza del pacchetto, con un nome di file sanitizzato.

Per mantenere chiara questa prima introduzione, il tutorial tralascia la gestione degli errori. Per i controller di produzione — dependency injection, gestione delle eccezioni, osservabilità e job in coda — proseguire con /integrations/codeigniter/production-usage/. Quella pagina illustra le varianti rafforzate.

  • Tag PHP di apertura su una riga a sé negli esempi di codice (PSR-12 Extended Coding Style §x1.x3.p11).
  • Forma dell’istruzione declare(strict_types=1) negli esempi di codice (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — tutta la superficie dell’API.
  • /integrations/codeigniter/configuration/ — modificare le impostazioni predefinite e i percorsi.
  • /integrations/codeigniter/production-usage/ — controller di livello produzione e job asincroni.
  • /integrations/codeigniter/troubleshooting/ — quando una route non restituisce alcun PDF.