Symfony Package
Symfony · LGPL-3.0Symfony 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-symfonyYê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.0PdfFactory 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
| Class | Mô tả |
|---|---|
TcpdfNextBundle | Đăng ký bundle và kết nối service |
PdfFactory | Factory thân thiện DI để tạo PDF document |
PdfResponse | HTTP response với security header |
GeneratePdfMessage | Messenger message cho tạo PDF bất đồng bộ |
GeneratePdfMessageHandler | Xử lý tạo PDF bất đồng bộ |
