Package Symfony
Symfony · LGPL-3.0Le 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
composer require yeeefang/tcpdf-next-symfonyPrérequis : Symfony ^7.0, PHP ^8.5
Le bundle est auto-configuré via Symfony Flex. Enregistrez manuellement si nécessaire :
// config/bundles.php
return [
// ...
Yeeefang\TcpdfNext\Symfony\TcpdfNextBundle::class => ['all' => true],
];Configuration
# 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.0Service PdfFactory
Injectez la factory dans vos services ou contrôleurs :
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 :
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 :
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
| Classe | Description |
|---|---|
TcpdfNextBundle | Enregistrement de bundle et câblage de service |
PdfFactory | Factory DI-friendly pour créer des documents PDF |
PdfResponse | Réponse HTTP avec en-têtes de sécurité |
GeneratePdfMessage | Message Messenger pour génération async |
GeneratePdfMessageHandler | Gère la génération PDF async |
