Ir al contenido

Inicio rápido: primer PDF en CodeIgniter 4

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.

Ventana de terminal
composer require nextpdf/codeigniter

Para revisar los requisitos y confirmar la detección del paquete, ver /integrations/codeigniter/install/.

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.

Asignar una ruta al método del controlador en app/Config/Routes.php:

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

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

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');
}
}
  • Un controlador que resuelve un servicio de NextPDF y devuelve un DownloadResponse tipado.
  • Dos puntos de entrada equivalentes: la clase Services y los helpers pdf() / pdf_document().
  • Una respuesta que incluye application/pdf y las cabeceras de seguridad del paquete, con un nombre de archivo saneado.

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.

  • 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).
  • /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.