Skip to content

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.

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

Display Inline

Renderizza il PDF direttamente nel visualizzatore integrato del browser con Content-Disposition: inline:

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

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

HeaderValoreScopo
Content-Typeapplication/pdfTipo MIME corretto
Content-Dispositioninline o attachmentModalità display
X-Content-Type-OptionsnosniffPreviene attacchi MIME-sniffing
Cache-Controlno-store, no-cache, must-revalidatePreviene 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:

php
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

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

php
return response()->pdf($pdf, 'report.pdf');         // download
return response()->pdfInline($pdf, 'report.pdf');   // inline

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

php
// Input: "../../etc/passwd"  ->  Sanitizzato: "etcpasswd.pdf"
return PdfResponse::download($pdf, $userInput);

Prossimi Passi

Rilasciato sotto licenza LGPL-3.0-or-later.