Skip to content

Symfony Package

TCPDF-Next Symfony
Symfony · LGPL-3.0

Symfony package cung cấp tích hợp Symfony 7 đầy đủ cho TCPDF-Next — DI container binding, service PdfFactory, tạo PDF bất đồng bộ qua Messenger, và helper HTTP response với OWASP security header.

Cài đặt

bash
composer require yeeefang/tcpdf-next-symfony

Yêu cầu: Symfony ^7.0, PHP ^8.5

Bundle được tự động cấu hình qua Symfony Flex. Đăng ký thủ công nếu cần:

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

Cấu hình

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 Service

Inject factory trong service hoặc controller:

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 Response

Class PdfResponse trả về PDF với OWASP security header được khuyến nghị:

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

// Hiển thị inline (xem trước trong trình duyệt)
return PdfResponse::inline($pdf, 'report.pdf');

// Bắt buộc download
return PdfResponse::download($pdf, 'report.pdf');

Tích hợp Messenger

Dispatch việc tạo PDF tới 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",
));

An toàn cho Worker (FrankenPHP / RoadRunner)

Bundle cấu hình DocumentFactory dạng singleton — font registry và image cache tồn tại qua các request trong persistent worker. Hoạt động với FrankenPHP, RoadRunner, và mọi Symfony Runtime implementation.

Nội dung Package

ClassMô tả
TcpdfNextBundleĐăng ký bundle và kết nối service
PdfFactoryFactory thân thiện DI để tạo PDF document
PdfResponseHTTP response với security header
GeneratePdfMessageMessenger message cho tạo PDF bất đồng bộ
GeneratePdfMessageHandlerXử lý tạo PDF bất đồng bộ

Phân phối theo giấy phép LGPL-3.0-or-later.