Skip to content

HTTP 응답

PdfResponse 클래스는 브라우저에 PDF를 전달하기 위한 안전하고 표준 준수 HTTP 응답 헬퍼를 제공합니다. MIME 스니핑을 방지하고 민감한 문서의 캐싱을 방지하는 보안 헤더를 포함하여 모든 필수 헤더를 자동으로 설정합니다.

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

인라인 표시

Content-Disposition: inline으로 브라우저의 내장 뷰어에 PDF를 직접 렌더링합니다:

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");
}

강제 다운로드

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");
}

보안 헤더

inline()download() 모두 자동으로 다음 헤더를 설정합니다:

헤더용도
Content-Typeapplication/pdf올바른 MIME 유형
Content-Dispositioninline 또는 attachment표시 모드
X-Content-Type-OptionsnosniffMIME 스니핑 공격 방지
Cache-Controlno-store, no-cache, must-revalidate민감한 PDF 캐싱 방지
Content-Length<바이트 수>다운로드 진행률 표시 활성화

이러한 기본값은 OWASP 보안 헤더 권장 사항을 따릅니다.

대용량 PDF 스트리밍

사용 가능한 메모리를 초과하는 문서의 경우, 출력 버퍼에 직접 청크를 스트리밍합니다:

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()은 문서 크기에 관계없이 일정한 메모리 사용량을 가진 StreamedResponse를 반환합니다.

메서드 시그니처

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;

응답 매크로

패키지는 편의를 위해 두 개의 응답 매크로를 등록합니다:

php
return response()->pdf($pdf, 'report.pdf');         // 다운로드
return response()->pdfInline($pdf, 'report.pdf');   // 인라인

이 매크로는 PdfResponse 메서드에 위임하므로 모든 보안 헤더가 적용됩니다.

파일명 살균

PdfResponse는 헤더 인젝션을 방지하기 위해 파일명을 살균합니다. [a-zA-Z0-9._-] 범위 밖의 문자는 제거되고 .pdf가 강제됩니다:

php
// 입력: "../../etc/passwd"  ->  살균됨: "etcpasswd.pdf"
return PdfResponse::download($pdf, $userInput);

다음 단계

  • Pdf 파사드 -- 문서 생성 및 테스트
  • 큐 작업 -- 무거운 PDF를 백그라운드 워커에 오프로드
  • 설정 -- 기본 헤더 및 동작 사용자 정의

LGPL-3.0-or-later 라이선스로 배포됩니다.