Skip to content

Queue Jobs

La classe GeneratePdfJob fornisce un job queueable pronto per delegare la generazione PDF a worker background. Accetta un callback builder, scrive il risultato a un percorso dato e supporta hook successo/fallimento, logica retry e dispatching batch.

php
use Yeeefang\TcpdfNext\Laravel\Jobs\GeneratePdfJob;

Dispatch Base

Passa un callback che riceve un Document fresco e un percorso output:

php
use Yeeefang\TcpdfNext\Core\Document;

GeneratePdfJob::dispatch(
    callback: function (Document $pdf) {
        $pdf->setTitle('Rapporto Mensile')
            ->addPage()
            ->setFont('Helvetica', '', 12)
            ->cell(0, 10, 'Generato asincronamente');
    },
    outputPath: storage_path('reports/monthly.pdf'),
)->onQueue('pdf-generation');

Il job risolve un Document dal container, lo passa al tuo callback, poi scrive l'output.

Parametri Costruttore

ParametroTipoDescrizione
callbackClosure(Document): voidBuilder che popola il PDF
outputPathstringPercorso destinazione (assoluto, o relativo a root disk)
disk?stringDisco filesystem Laravel (default: null per file locale)
onSuccess?Closure(string): voidChiamato con percorso output al successo
onFailure?Closure(Throwable): voidChiamato con eccezione al fallimento

Callback Successo e Fallimento

php
GeneratePdfJob::dispatch(
    callback: function (Document $pdf) {
        $pdf->setTitle('Contratto')
            ->addPage()
            ->setFont('Helvetica', 'B', 14)
            ->cell(0, 10, 'Accordo Servizio');
    },
    outputPath: 'contracts/SA-0042.pdf',
    disk: 's3',
    onSuccess: function (string $path) {
        Notification::send($user, new ContractReady($path));
    },
    onFailure: function (Throwable $e) {
        Log::error('Contratto PDF fallito', ['error' => $e->getMessage()]);
    },
)->onQueue('pdf-generation');

Logica Retry

La configurazione retry standard Laravel è supportata:

php
GeneratePdfJob::dispatch(
    callback: fn (Document $pdf) => $pdf->addPage()->cell(0, 10, 'Demo retry'),
    outputPath: storage_path('reports/demo.pdf'),
)
->onQueue('pdf-generation')
->tries(3)
->backoff([10, 30, 60]);

I valori retry predefiniti possono essere impostati in config/tcpdf-next.php sotto la chiave queue.

Configurazione Connessione Queue

Indirizza job PDF a una connessione dedicata:

php
GeneratePdfJob::dispatch(
    callback: fn (Document $pdf) => $pdf->addPage()->cell(0, 10, 'Ciao'),
    outputPath: storage_path('output.pdf'),
)
->onConnection('redis')
->onQueue('pdf-generation')
->afterCommit();

Generazione PDF Batch

Usa Bus::batch() per generare multipli PDF in parallelo:

php
use Illuminate\Support\Facades\Bus;

$jobs = $invoices->map(fn (Invoice $inv) =>
    new GeneratePdfJob(
        callback: function (Document $pdf) use ($inv) {
            $pdf->setTitle("Fattura #{$inv->number}")
                ->addPage()
                ->setFont('Helvetica', 'B', 14)
                ->cell(0, 10, "Fattura #{$inv->number}");
        },
        outputPath: "invoices/{$inv->number}.pdf",
        disk: 'local',
    )
);

Bus::batch($jobs)
    ->name('Batch Fatture Mensili')
    ->onQueue('pdf-generation')
    ->allowFailures()
    ->then(fn () => Notification::send($admin, new BatchComplete()))
    ->catch(fn () => Log::warning('Alcuni PDF fattura falliti'))
    ->dispatch();

Prossimi Passi

Rilasciato sotto licenza LGPL-3.0-or-later.