Skip to content

Paquete Symfony

TCPDF-Next Symfony
Symfony · LGPL-3.0

El 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

bash
composer require yeeefang/tcpdf-next-symfony

Requisitos: Symfony ^7.0, PHP ^8.5

El bundle se auto-configura via Symfony Flex. Regístralo manualmente si es necesario:

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

Configuración

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

Servicio PdfFactory

Inyecta el factory en tus servicios o controladores:

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

Respuestas HTTP

La clase PdfResponse retorna PDFs con cabeceras de seguridad recomendadas por OWASP:

php
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:

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

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

ClaseDescripción
TcpdfNextBundleRegistro de bundle y wiring de servicios
PdfFactoryFactory amigable con DI para crear documentos PDF
PdfResponseRespuesta HTTP con cabeceras de seguridad
GeneratePdfMessageMensaje Messenger para generación asíncrona
GeneratePdfMessageHandlerManeja la generación de PDF asíncrona

Distribuido bajo la licencia LGPL-3.0-or-later.