Bỏ qua để đến nội dung

Bắt đầu nhanh — PDF đầu tiên của bạn trong CodeIgniter 4

Phân giải service pdf trong một controller, thêm nội dung vào tài liệu của service đó, rồi trả về phản hồi tải xuống. Nhờ vậy, bạn có một tệp Portable Document Format (PDF) chỉ với ba dòng và một phản hồi Hypertext Transfer Protocol (HTTP).

Terminal window
composer require nextpdf/codeigniter

Để biết các yêu cầu và cách kiểm tra việc phát hiện gói, xem /integrations/codeigniter/install/.

Tạo một controller trả về PDF. Thư viện Pdf tạo cho bạn một tài liệu mới, rồi chuyển tài liệu đó thành một DownloadResponse của CodeIgniter.

Mọi ví dụ PHP trên trang này đều đặt declare(strict_types=1); sau thẻ mở PHP, trên một dòng riêng (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() trả về một Pdf mới. Bộ kiểm thử chức năng của gói cũng xác minh rằng tài liệu bên dưới của nó là mới trong mỗi lần gọi. Lệnh gọi download() tạo một DownloadResponse với disposition attachment.

Ánh xạ một route tới phương thức của controller trong app/Config/Routes.php:

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

Mở /invoices/42/pdf. Trình duyệt của bạn sẽ tải xuống invoice-42.pdf. Phản hồi này bao gồm Content-Type: application/pdf và các header tăng cường bảo mật phản hồi của gói.

Biến thể — xem trước inline bằng helper

Phần tiêu đề “Biến thể — xem trước inline bằng helper”

Helper toàn cục pdf() tương đương với Services::pdf(). Gọi inline() để hiển thị PDF trong trình duyệt thay vì tải xuống:

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

Biến thể — dùng trực tiếp document và PdfResponse

Phần tiêu đề “Biến thể — dùng trực tiếp document và PdfResponse”

Nếu đã có một Document, bạn có thể tạo phản hồi trực tiếp bằng PdfResponse. Helper pdf_document() cung cấp cho bạn một tài liệu mới đã được cấu hình sẵn.

<?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');
}
}
  • Một controller phân giải một service NextPDF và trả về một DownloadResponse được định kiểu.
  • Hai điểm vào tương đương nhau: lớp Services và các helper pdf() / pdf_document().
  • Một phản hồi với application/pdf, các header bảo mật của gói và một tên tệp đã được làm sạch.

Để phần giới thiệu đầu tiên này luôn tập trung, hướng dẫn lược bỏ phần xử lý lỗi. Để có các controller cấp sản xuất với dependency injection, xử lý ngoại lệ, khả năng quan sát và queue job, hãy tiếp tục đến /integrations/codeigniter/production-usage/. Trang đó trình bày các biến thể đã được tăng cường.

  • Thẻ mở PHP nằm trên một dòng riêng trong các ví dụ mã (PSR-12 Extended Coding Style §x1.x3.p11).
  • Dạng câu lệnh declare(strict_types=1) được dùng trong các ví dụ mã (PSR-12 Extended Coding Style §x1.x3.p34).
  • /integrations/codeigniter/overview/ — toàn bộ bề mặt giao diện lập trình ứng dụng (API).
  • /integrations/codeigniter/configuration/ — thay đổi các giá trị mặc định và đường dẫn.
  • /integrations/codeigniter/production-usage/ — các controller cấp sản xuất và job bất đồng bộ.
  • /integrations/codeigniter/troubleshooting/ — khi một route không trả về PDF nào.