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
| Parametro | Tipo | Descrizione |
|---|---|---|
callback | Closure(Document): void | Builder che popola il PDF |
outputPath | string | Percorso destinazione (assoluto, o relativo a root disk) |
disk | ?string | Disco filesystem Laravel (default: null per file locale) |
onSuccess | ?Closure(string): void | Chiamato con percorso output al successo |
onFailure | ?Closure(Throwable): void | Chiamato 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
- Pdf Facade — Crea documenti usati dal callback job
- Risposte HTTP — Serve PDF generati agli utenti
- Configurazione — Connessione queue e default retry