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 配置为单例 — 字体注册表和图片缓存在持久化 Worker 的请求之间保持有效。兼容 FrankenPHP、RoadRunner 以及任何 Symfony Runtime 实现。

包内容

说明
TcpdfNextBundleBundle 注册与服务配置
PdfFactory依赖注入友好的 PDF 文档工厂
PdfResponse附带安全头的 HTTP 响应
GeneratePdfMessageMessenger 异步生成消息
GeneratePdfMessageHandler异步 PDF 生成处理器

以 LGPL-3.0-or-later 许可证发布。