Skip to content

Package Symfony

TCPDF-Next Symfony
Symfony · LGPL-3.0

Le package Symfony fournit une intégration Symfony 7 de première classe pour TCPDF-Next — bindings conteneur DI, service PdfFactory, génération async basée sur Messenger et helpers de réponse HTTP avec en-têtes de sécurité OWASP.

Installation

bash
composer require yeeefang/tcpdf-next-symfony

Prérequis : Symfony ^7.0, PHP ^8.5

Le bundle est auto-configuré via Symfony Flex. Enregistrez manuellement si nécessaire :

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

Configuration

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

Service PdfFactory

Injectez la factory dans vos services ou contrôleurs :

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");
    }
}

Réponses HTTP

La classe PdfResponse retourne des PDF avec en-têtes de sécurité recommandés par OWASP :

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

// Affichage inline (aperçu navigateur)
return PdfResponse::inline($pdf, 'report.pdf');

// Forcer le téléchargement
return PdfResponse::download($pdf, 'report.pdf');

Intégration Messenger

Dispatcher la génération PDF vers un worker Messenger :

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",
));

Sûr pour Worker (FrankenPHP / RoadRunner)

Le bundle configure DocumentFactory comme singleton — les registres de polices et caches d'images survivent aux requêtes dans les workers persistants. Fonctionne avec FrankenPHP, RoadRunner et toute implémentation Symfony Runtime.

Contenu du package

ClasseDescription
TcpdfNextBundleEnregistrement de bundle et câblage de service
PdfFactoryFactory DI-friendly pour créer des documents PDF
PdfResponseRéponse HTTP avec en-têtes de sécurité
GeneratePdfMessageMessage Messenger pour génération async
GeneratePdfMessageHandlerGère la génération PDF async

Distribué sous licence LGPL-3.0-or-later.