Przejdź do głównej zawartości

Szybki start — pierwszy plik PDF w CodeIgniter 4

W kontrolerze pobierz usługę pdf, dodaj treść do jej dokumentu i zwróć odpowiedź z plikiem do pobrania. W efekcie powstaje plik w formacie Portable Document Format (PDF) w trzech wierszach kodu i jednej odpowiedzi Hypertext Transfer Protocol (HTTP).

Okno terminala
composer require nextpdf/codeigniter

Wymagania i sposób sprawdzenia, czy pakiet jest wykrywany, opisano na stronie /integrations/codeigniter/install/.

Utwórz kontroler zwracający plik PDF. Biblioteka Pdf tworzy nowy dokument, a następnie przekształca go w obiekt DownloadResponse CodeIgniter.

W każdym przykładzie PHP na tej stronie instrukcja declare(strict_types=1); znajduje się po znaczniku otwierającym, w osobnym wierszu (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() zwraca nowy obiekt Pdf. Pakietowy zestaw testów funkcjonalnych potwierdza również, że dokument bazowy jest nowy przy każdym wywołaniu. Wywołanie download() tworzy obiekt DownloadResponse z dyspozycją attachment.

Zmapuj trasę do metody kontrolera w pliku app/Config/Routes.php:

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

Otwórz /invoices/42/pdf. Przeglądarka pobierze plik invoice-42.pdf. Odpowiedź zawiera Content-Type: application/pdf oraz dodawane przez pakiet nagłówki zwiększające bezpieczeństwo odpowiedzi.

Wariant — podgląd inline z użyciem funkcji pomocniczej

Dział zatytułowany „Wariant — podgląd inline z użyciem funkcji pomocniczej”

Globalna funkcja pomocnicza pdf() działa tak samo jak Services::pdf(). Wywołaj inline(), aby wyświetlić plik PDF w przeglądarce, zamiast go pobierać:

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

Jeśli masz już obiekt Document, możesz zbudować odpowiedź bezpośrednio za pomocą PdfResponse. Funkcja pomocnicza pdf_document() zwraca nowy, wstępnie skonfigurowany dokument.

<?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');
}
}
  • Kontroler pobierający usługę NextPDF i zwracający typowany obiekt DownloadResponse.
  • Dwa równoważne punkty wejścia: klasa Services oraz funkcje pomocnicze pdf() / pdf_document().
  • Odpowiedź z application/pdf, nagłówkami bezpieczeństwa pakietu i oczyszczoną nazwą pliku.

Aby zachować zwięzłość pierwszego wprowadzenia, ten samouczek pomija obsługę błędów. Kontrolery produkcyjne ze wstrzykiwaniem zależności, obsługą wyjątków, obserwowalnością oraz zadaniem kolejki opisano na stronie /integrations/codeigniter/production-usage/. Tam znajdziesz wzmocnione warianty.

  • Znacznik otwierający PHP w osobnym wierszu w przykładach kodu (PSR-12 Extended Coding Style §x1.x3.p11).
  • Forma instrukcji declare(strict_types=1) w przykładach kodu (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — pełny zakres interfejsu programowania aplikacji (API).
  • /integrations/codeigniter/configuration/ — zmiana ustawień domyślnych i ścieżek.
  • /integrations/codeigniter/production-usage/ — kontrolery gotowe do produkcji oraz zadania asynchroniczne.
  • /integrations/codeigniter/troubleshooting/ — gdy trasa nie zwraca pliku PDF.