Risposte HTTP
La classe PdfResponse fornisce helper risposta HTTP sicuri e conformi agli standard per consegnare PDF al browser. Imposta automaticamente tutti gli header richiesti, inclusi header sicurezza che prevengono MIME-sniffing e caching di documenti sensibili.
use Yeeefang\TcpdfNext\Laravel\Http\PdfResponse;Display Inline
Renderizza il PDF direttamente nel visualizzatore integrato del browser con Content-Disposition: inline:
use Yeeefang\TcpdfNext\Laravel\Facades\Pdf;
use Yeeefang\TcpdfNext\Laravel\Http\PdfResponse;
public function preview(Invoice $invoice)
{
$pdf = Pdf::create()
->setTitle("Fattura #{$invoice->number}")
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, "Fattura #{$invoice->number}");
return PdfResponse::inline($pdf, "invoice-{$invoice->number}.pdf");
}Forza Download
Attiva la finestra salva-file del browser con Content-Disposition: attachment:
public function download(Invoice $invoice)
{
$pdf = Pdf::create()
->setTitle("Fattura #{$invoice->number}")
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, "Fattura #{$invoice->number}");
return PdfResponse::download($pdf, "invoice-{$invoice->number}.pdf");
}Header Sicurezza
Sia inline() che download() impostano automaticamente questi header:
| Header | Valore | Scopo |
|---|---|---|
Content-Type | application/pdf | Tipo MIME corretto |
Content-Disposition | inline o attachment | Modalità display |
X-Content-Type-Options | nosniff | Previene attacchi MIME-sniffing |
Cache-Control | no-store, no-cache, must-revalidate | Previene caching PDF sensibili |
Content-Length | <byte count> | Abilita barre progresso download |
Questi default seguono le raccomandazioni OWASP secure headers.
Streaming PDF Grandi
Per documenti che eccedono la memoria disponibile, invia chunk direttamente al buffer output:
public function downloadLargeReport()
{
$pdf = Pdf::create()->setTitle('Rapporto Annuale');
foreach ($sections as $section) {
$pdf->addPage()
->setFont('Helvetica', '', 11)
->multiCell(0, 6, $section->content);
}
return PdfResponse::stream($pdf, 'annual-report.pdf');
}PdfResponse::stream() restituisce una StreamedResponse con uso memoria costante indipendentemente dalla dimensione documento.
Firme Metodi
public static function inline(PdfDocumentInterface $pdf, string $filename): Response;
public static function download(PdfDocumentInterface $pdf, string $filename): Response;
public static function stream(PdfDocumentInterface $pdf, string $filename): StreamedResponse;Macro Response
Il pacchetto registra due macro response per convenienza:
return response()->pdf($pdf, 'report.pdf'); // download
return response()->pdfInline($pdf, 'report.pdf'); // inlineQueste macro delegano ai metodi PdfResponse, quindi tutti gli header sicurezza sono applicati.
Sanitizzazione Filename
PdfResponse sanitizza il filename per prevenire iniezione header. I caratteri fuori [a-zA-Z0-9._-] sono rimossi e .pdf è imposto:
// Input: "../../etc/passwd" -> Sanitizzato: "etcpasswd.pdf"
return PdfResponse::download($pdf, $userInput);Prossimi Passi
- Pdf Facade — Creazione documento e testing
- Queue Jobs — Delega PDF pesanti a worker background
- Configurazione — Personalizza header predefiniti e comportamento