Skip to content

Paket Symfony

TCPDF-Next Symfony
Symfony · LGPL-3.0

Paket Symfony menyediakan integrasi Symfony 7 kelas satu untuk TCPDF-Next — binding container DI, service PdfFactory, pembuatan async berbasis Messenger, dan helper respons HTTP dengan header keamanan OWASP.

Instalasi

bash
composer require yeeefang/tcpdf-next-symfony

Persyaratan: Symfony ^7.0, PHP ^8.5

Bundle di-auto-configure via Symfony Flex. Daftarkan secara manual jika diperlukan:

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

Konfigurasi

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

Inject factory di service atau controller Anda:

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

Respons HTTP

Class PdfResponse mengembalikan PDF dengan header keamanan yang direkomendasikan OWASP:

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

// Tampilan inline (preview browser)
return PdfResponse::inline($pdf, 'report.pdf');

// Paksa download
return PdfResponse::download($pdf, 'report.pdf');

Integrasi Messenger

Dispatch pembuatan PDF ke 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",
));

Aman untuk Worker (FrankenPHP / RoadRunner)

Bundle mengonfigurasi DocumentFactory sebagai singleton — registry font dan cache gambar bertahan antar request di persistent worker. Bekerja dengan FrankenPHP, RoadRunner, dan implementasi Symfony Runtime apa pun.

Isi Paket

ClassDeskripsi
TcpdfNextBundleRegistrasi bundle dan wiring service
PdfFactoryFactory yang DI-friendly untuk membuat dokumen PDF
PdfResponseRespons HTTP dengan header keamanan
GeneratePdfMessagePesan Messenger untuk pembuatan async
GeneratePdfMessageHandlerMenangani pembuatan PDF async

Didistribusikan di bawah lisensi LGPL-3.0-or-later.