Skip to content

Respostas HTTP

A classe PdfResponse fornece helpers de resposta HTTP seguras e compatíveis com os padrões para entregar PDFs ao navegador. Ela define todos os headers necessários automaticamente, incluindo headers de segurança que previnem MIME-sniffing e cache de documentos sensíveis.

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

Exibição Inline

Renderize o PDF diretamente no visualizador embutido do navegador com 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("Invoice #{$invoice->number}")
        ->addPage()
        ->setFont('Helvetica', '', 12)
        ->cell(0, 10, "Invoice #{$invoice->number}");

    return PdfResponse::inline($pdf, "invoice-{$invoice->number}.pdf");
}

Forçar Download

Acione o diálogo de salvamento do navegador com Content-Disposition: attachment:

php
public function download(Invoice $invoice)
{
    $pdf = Pdf::create()
        ->setTitle("Invoice #{$invoice->number}")
        ->addPage()
        ->setFont('Helvetica', '', 12)
        ->cell(0, 10, "Invoice #{$invoice->number}");

    return PdfResponse::download($pdf, "invoice-{$invoice->number}.pdf");
}

Headers de Segurança

Tanto inline() quanto download() definem automaticamente estes headers:

HeaderValorFinalidade
Content-Typeapplication/pdfTipo MIME correto
Content-Dispositioninline ou attachmentModo de exibição
X-Content-Type-OptionsnosniffPrevenir ataques de MIME-sniffing
Cache-Controlno-store, no-cache, must-revalidatePrevenir cache de PDFs sensíveis
Content-Length<byte count>Habilita barras de progresso de download

Esses padrões seguem as recomendações de secure headers do OWASP.

Streaming de PDFs Grandes

Para documentos que excedem a memória disponível, transmita chunks diretamente para o buffer de saída:

php
public function downloadLargeReport()
{
    $pdf = Pdf::create()->setTitle('Annual Report');

    foreach ($sections as $section) {
        $pdf->addPage()
            ->setFont('Helvetica', '', 11)
            ->multiCell(0, 6, $section->content);
    }

    return PdfResponse::stream($pdf, 'annual-report.pdf');
}

PdfResponse::stream() retorna uma StreamedResponse com uso constante de memória independentemente do tamanho do documento.

Assinaturas de Métodos

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;

Macros de Response

O pacote registra dois macros de response por conveniência:

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

Esses macros delegam para métodos do PdfResponse, então todos os headers de segurança são aplicados.

Sanitização de Nomes de Arquivo

O PdfResponse sanitiza o nome do arquivo para prevenir injeção de headers. Caracteres fora de [a-zA-Z0-9._-] são removidos e .pdf é imposto:

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

Próximos Passos

  • Facade Pdf -- Criação de documentos e testes
  • Queue Jobs -- Transfira PDFs pesados para workers em background
  • Configuração -- Personalize headers e comportamento padrão

Distribuído sob a licença LGPL-3.0-or-later.