Symfony 套件
Symfony · LGPL-3.0Symfony 套件提供 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.0PdfFactory 服務
在你的服務或控制器中注入工廠:
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 實作。
套件內容
| 類別 | 說明 |
|---|---|
TcpdfNextBundle | Bundle 註冊與服務接線 |
PdfFactory | DI 友善的 PDF 文件建立工廠 |
PdfResponse | 附帶安全標頭的 HTTP 回應 |
GeneratePdfMessage | 用於非同步生成的 Messenger 訊息 |
GeneratePdfMessageHandler | 處理非同步 PDF 生成 |
