Paquete Symfony
Symfony · LGPL-3.0El paquete Symfony proporciona integración de primera clase con Symfony 7 para TCPDF-Next -- bindings del contenedor DI, un servicio PdfFactory, generación asíncrona basada en Messenger y helpers de respuesta HTTP con cabeceras de seguridad OWASP.
Instalación
composer require yeeefang/tcpdf-next-symfonyRequisitos: Symfony ^7.0, PHP ^8.5
El bundle se auto-configura via Symfony Flex. Regístralo manualmente si es necesario:
// config/bundles.php
return [
// ...
Yeeefang\TcpdfNext\Symfony\TcpdfNextBundle::class => ['all' => true],
];Configuración
# 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.0Servicio PdfFactory
Inyecta el factory en tus servicios o controladores:
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");
}
}Respuestas HTTP
La clase PdfResponse retorna PDFs con cabeceras de seguridad recomendadas por OWASP:
use Yeeefang\TcpdfNext\Symfony\Http\PdfResponse;
// Visualización inline (previsualización en navegador)
return PdfResponse::inline($pdf, 'report.pdf');
// Forzar descarga
return PdfResponse::download($pdf, 'report.pdf');Integración con Messenger
Despacha generación de PDF a un worker de 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",
));Seguro para workers (FrankenPHP / RoadRunner)
El bundle configura DocumentFactory como singleton -- los registros de fuentes y cachés de imágenes persisten entre requests en workers persistentes. Funciona con FrankenPHP, RoadRunner y cualquier implementación de Symfony Runtime.
Contenido del paquete
| Clase | Descripción |
|---|---|
TcpdfNextBundle | Registro de bundle y wiring de servicios |
PdfFactory | Factory amigable con DI para crear documentos PDF |
PdfResponse | Respuesta HTTP con cabeceras de seguridad |
GeneratePdfMessage | Mensaje Messenger para generación asíncrona |
GeneratePdfMessageHandler | Maneja la generación de PDF asíncrona |
