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 配置为单例 — 字体注册表和图片缓存在持久化 Worker 的请求之间保持有效。兼容 FrankenPHP、RoadRunner 以及任何 Symfony Runtime 实现。
包内容
| 类 | 说明 |
|---|---|
TcpdfNextBundle | Bundle 注册与服务配置 |
PdfFactory | 依赖注入友好的 PDF 文档工厂 |
PdfResponse | 附带安全头的 HTTP 响应 |
GeneratePdfMessage | Messenger 异步生成消息 |
GeneratePdfMessageHandler | 异步 PDF 生成处理器 |
