Skip to content

Symfony 套件

TCPDF-Next Symfony
Symfony · LGPL-3.0

Symfony 套件提供 TCPDF-Next 的第一級 Symfony 7 整合 — DI 容器繫結、PdfFactory 服務、基於 Messenger 的非同步生成,以及附帶 OWASP 安全標頭的 HTTP 回應輔助方法。

安裝

bash
composer require yeeefang/tcpdf-next-symfony

需求: Symfony ^7.0、PHP ^8.5

Bundle 會透過 Symfony Flex 自動設定。若需手動註冊:

php
// config/bundles.php
return [
    // ...
    Yeeefang\TcpdfNext\Symfony\TcpdfNextBundle::class => ['all' => true],
];

設定

yaml
# config/packages/tcpdf_next.yaml
tcpdf_next:
    fonts_directory: '%kernel.project_dir%/resources/fonts'
    default_page_size: A4
    default_orientation: portrait
    auto_page_break: true
    margin_bottom: 25.0

PdfFactory 服務

在你的服務或控制器中注入工廠:

php
use Yeeefang\TcpdfNext\Symfony\PdfFactory;

class InvoiceController extends AbstractController
{
    public function __construct(
        private readonly PdfFactory $pdfFactory,
    ) {}

    #[Route('/invoice/{id}/pdf')]
    public function download(Invoice $invoice): Response
    {
        $pdf = $this->pdfFactory->create()
            ->setTitle("Invoice #{$invoice->number}")
            ->addPage()
            ->setFont('Helvetica', '', 12)
            ->cell(0, 10, "Invoice #{$invoice->number}");

        return $this->pdfFactory->response($pdf, "invoice-{$invoice->number}.pdf");
    }
}

HTTP 回應

PdfResponse 類別會附帶 OWASP 建議的安全標頭回傳 PDF:

php
use Yeeefang\TcpdfNext\Symfony\Http\PdfResponse;

// 行內顯示(瀏覽器預覽)
return PdfResponse::inline($pdf, 'report.pdf');

// 強制下載
return PdfResponse::download($pdf, 'report.pdf');

Messenger 整合

將 PDF 生成任務分派到 Messenger worker:

php
use Yeeefang\TcpdfNext\Symfony\Messenger\GeneratePdfMessage;

$this->bus->dispatch(new GeneratePdfMessage(
    template: 'invoice',
    data: ['invoice_id' => $invoice->id],
    outputPath: "/tmp/invoice-{$invoice->id}.pdf",
));

Worker 安全(FrankenPHP / RoadRunner)

Bundle 將 DocumentFactory 設定為 singleton — 字型註冊表與圖片快取在常駐 worker 的請求間持續存活。支援 FrankenPHP、RoadRunner 以及任何 Symfony Runtime 實作。

套件內容

類別說明
TcpdfNextBundleBundle 註冊與服務接線
PdfFactoryDI 友善的 PDF 文件建立工廠
PdfResponse附帶安全標頭的 HTTP 回應
GeneratePdfMessage用於非同步生成的 Messenger 訊息
GeneratePdfMessageHandler處理非同步 PDF 生成

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