Pular para o conteúdo

Início rápido — seu primeiro PDF no CodeIgniter 4

Resolva o serviço pdf em um controller, adicione conteúdo ao documento e retorne uma resposta para download. Isso gera um arquivo no formato Portable Document Format (PDF) em três linhas e uma única resposta do protocolo Hypertext Transfer Protocol (HTTP).

Terminal window
composer require nextpdf/codeigniter

Para conferir os requisitos e as verificações de descoberta do pacote, consulte /integrations/codeigniter/install/.

Crie um controller que retorne um PDF. A biblioteca Pdf cria um novo documento para você e, em seguida, transforma esse documento em um DownloadResponse do CodeIgniter.

Todos os exemplos de PHP nesta página colocam declare(strict_types=1); depois da tag de abertura, em sua própria linha (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() retorna um novo Pdf. A suíte de testes funcionais do pacote também verifica se o documento subjacente é novo a cada chamada. A chamada download() produz um DownloadResponse com a disposição attachment.

Mapeie uma rota para o método do controller em app/Config/Routes.php:

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

Abra /invoices/42/pdf. O navegador baixa invoice-42.pdf. A resposta inclui Content-Type: application/pdf e os cabeçalhos de proteção da resposta do pacote.

O helper global pdf() é equivalente a Services::pdf(). Chame inline() para exibir o PDF no navegador em vez de baixá-lo:

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

Se você já tiver um Document, monte a resposta diretamente com PdfResponse. O helper pdf_document() fornece um documento novo e pré-configurado.

<?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');
}
}
  • Um controller que resolve um serviço NextPDF e retorna um DownloadResponse tipado.
  • Dois pontos de entrada equivalentes: a classe Services e os helpers pdf() / pdf_document().
  • Uma resposta com application/pdf, cabeçalhos de segurança do pacote e um nome de arquivo sanitizado.

Para manter esta primeira introdução objetiva, este tutorial não aborda tratamento de erros. Para controllers de produção com injeção de dependências, tratamento de exceções, observabilidade e o job de fila, continue em /integrations/codeigniter/production-usage/. Essa página mostra as variantes reforçadas.

  • Tag de abertura do PHP em sua própria linha nos exemplos de código (PSR-12 Extended Coding Style §x1.x3.p11).
  • Forma da instrução declare(strict_types=1) nos exemplos de código (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — toda a superfície da application programming interface (API).
  • /integrations/codeigniter/configuration/ — ajuste padrões e caminhos.
  • /integrations/codeigniter/production-usage/ — controllers de nível de produção e jobs assíncronos.
  • /integrations/codeigniter/troubleshooting/ — quando uma rota não retorna nenhum PDF.