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-Type | application/pdf | 올바른 MIME 유형 |
Content-Disposition | inline 또는 attachment | 표시 모드 |
X-Content-Type-Options | nosniff | MIME 스니핑 공격 방지 |
Cache-Control | no-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);