Skip to content

CodeIgniter 套件

TCPDF-Next CodeIgniter
CodeIgniter · LGPL-3.0

CodeIgniter 套件提供 TCPDF-Next 的 CodeIgniter 4 整合 — 服務註冊、供控制器使用的 Library 類別、基於佇列的非同步生成,以及附帶 OWASP 安全標頭的 HTTP 回應輔助方法。

安裝

bash
composer require yeeefang/tcpdf-next-codeigniter

需求: CodeIgniter ^4.0、PHP ^8.5

設定

發佈設定檔:

bash
php spark tcpdf-next:publish
php
// app/Config/TcpdfNext.php
namespace Config;

use CodeIgniter\Config\BaseConfig;

class TcpdfNext extends BaseConfig
{
    public string $fontsDirectory = WRITEPATH . 'fonts';
    public string $defaultPageSize = 'A4';
    public string $defaultOrientation = 'portrait';
    public bool $autoPageBreak = true;
    public float $marginBottom = 25.0;
}

使用 Service

在控制器中使用服務:

php
namespace App\Controllers;

use Yeeefang\TcpdfNext\CodeIgniter\Services\TcpdfNextService;

class InvoiceController extends BaseController
{
    public function download(int $id)
    {
        $invoice = model('InvoiceModel')->find($id);

        $pdf = service('tcpdfnext')->create()
            ->setTitle("Invoice #{$invoice->number}")
            ->addPage()
            ->setFont('Helvetica', '', 12)
            ->cell(0, 10, "Invoice #{$invoice->number}");

        return service('tcpdfnext')->response($pdf, "invoice-{$invoice->number}.pdf");
    }
}

使用 Library

或者使用 Library 類別:

php
namespace App\Controllers;

use Yeeefang\TcpdfNext\CodeIgniter\Libraries\PdfLibrary;

class ReportController extends BaseController
{
    public function generate()
    {
        $pdfLib = new PdfLibrary();

        $pdf = $pdfLib->create()
            ->setTitle('Monthly Report')
            ->addPage()
            ->setFont('Helvetica', 'B', 16)
            ->cell(0, 10, 'Monthly Report', newLine: true);

        return $pdfLib->inline($pdf, 'report.pdf');
    }
}

HTTP 回應

回應輔助方法包含 OWASP 建議的安全標頭:

php
// 行內顯示(瀏覽器預覽)
return service('tcpdfnext')->inline($pdf, 'report.pdf');

// 強制下載
return service('tcpdfnext')->download($pdf, 'report.pdf');

佇列整合

將 PDF 生成任務分派到 CodeIgniter 的任務排程器:

php
use Yeeefang\TcpdfNext\CodeIgniter\Queue\GeneratePdfJob;

$job = new GeneratePdfJob([
    'template' => 'invoice',
    'data' => ['invoice_id' => $invoice->id],
    'output_path' => WRITEPATH . "pdfs/invoice-{$invoice->id}.pdf",
]);

service('queue')->push($job);

套件內容

類別說明
TcpdfNextService服務註冊與工廠
PdfLibrary供控制器使用的 Library 類別
PdfResponse附帶安全標頭的 HTTP 回應
GeneratePdfJob背景生成的佇列任務

以 LGPL-3.0-or-later 授權釋出。