Inicio rápido: primer PDF en CodeIgniter 4
De un vistazo
Sección titulada «De un vistazo»Resolver el servicio pdf en un controlador, agregar contenido al documento y devolver una respuesta de descarga: tres líneas de trabajo y una respuesta HTTP.
Instalación
Sección titulada «Instalación»composer require nextpdf/codeigniterPara revisar los requisitos y confirmar la detección del paquete, ver /integrations/codeigniter/install/.
Paso 1 — Generar un controlador
Sección titulada «Paso 1 — Generar un controlador»Crear un controlador que devuelva un PDF. La biblioteca Pdf encapsula un documento nuevo y después convierte ese documento en un DownloadResponse de CodeIgniter.
Todos los ejemplos de PHP de esta página declaran declare(strict_types=1); después de la etiqueta de apertura, en una línea propia (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() devuelve un Pdf nuevo. El documento subyacente también es nuevo en cada llamada, como verifica el conjunto de pruebas funcionales del paquete. La llamada a download() produce un DownloadResponse con disposición attachment.
Paso 2 — Agregar una ruta
Sección titulada «Paso 2 — Agregar una ruta»Asignar una ruta al método del controlador en app/Config/Routes.php:
$routes->get('invoices/(:num)/pdf', 'InvoiceController::download/$1');Paso 3 — Solicitar el PDF
Sección titulada «Paso 3 — Solicitar el PDF»Abrir /invoices/42/pdf. El navegador descarga invoice-42.pdf. La respuesta incluye Content-Type: application/pdf y las cabeceras de protección de respuesta del paquete.
Variación: vista previa en línea con el helper
Sección titulada «Variación: vista previa en línea con el helper»El helper global pdf() es equivalente a Services::pdf(). Para mostrar el PDF en el navegador en lugar de descargarlo, llamar a 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'); }}Variación: documento directo y PdfResponse
Sección titulada «Variación: documento directo y PdfResponse»Cuando ya se tiene un Document, construir la respuesta directamente con PdfResponse. El helper pdf_document() devuelve un documento nuevo y preconfigurado.
<?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'); }}Lo que se construye
Sección titulada «Lo que se construye»- Un controlador que resuelve un servicio de NextPDF y devuelve un
DownloadResponsetipado. - Dos puntos de entrada equivalentes: la clase
Servicesy los helperspdf()/pdf_document(). - Una respuesta que incluye
application/pdfy las cabeceras de seguridad del paquete, con un nombre de archivo saneado.
Próximos pasos
Sección titulada «Próximos pasos»Para mantener clara esta introducción inicial, el tutorial omite el manejo de errores. Para controladores de producción —inyección de dependencias, manejo de excepciones, observabilidad y el trabajo en cola—, continuar en /integrations/codeigniter/production-usage/. Esa página presenta las variantes reforzadas.
Conformidad
Sección titulada «Conformidad»- Etiqueta de apertura PHP en su propia línea en los ejemplos de código (PSR-12 Extended Coding Style §x1.x3.p11).
- Forma de la sentencia declare(strict_types=1) en los ejemplos de código (PSR-12 Extended Coding Style §x1.x3.p34).
Consulta también
Sección titulada «Consulta también»- /integrations/codeigniter/overview/ — superficie completa de la API.
- /integrations/codeigniter/configuration/ — cambiar los valores predeterminados y las rutas.
- /integrations/codeigniter/production-usage/ — controladores de nivel de producción y trabajos asíncronos.
- /integrations/codeigniter/troubleshooting/ — si una ruta no devuelve ningún PDF.