PDFファイルをブラウザ表示させる方法
TCPDFで生成したPDFファイルをブラウザ表示させるには、コントローラーからレスポンスの返し方で実現できます。
手順としては、以下のような感じです。
- TCPDFでPDFファイルを作成(説明は省略)
- Tempに一時的にファイル出力
- Laravelのコントローラーから、レスポンスで出力させる
Tempに一時的にファイル出力
1 2 3 4 5 6 7 8 9 10 11 |
// 一時ファイル名 $temp_file = tempnam(sys_get_temp_dir(), 'TCPDF'); // 一時ファイル名を設定 $pdf->setOutFileName($temp_file); // ファイル作成 $pdf->setOutputType('F'); // 出力実行 $pdf->Out(); |
tempnam()は、一意のファイル名を生成します。
sys_get_temp_dir()は、一時ファイルを保存するフォルダを返してくれます。
あとは、一時ファイル名を設定して、ファイル作成、出力実行して一時フォルダにファイルを作成しています。
レスポンスで出力させる
1 2 3 4 |
// ヘッダー生成 $headers = ['Content-disposition' => "inline; filename='{$filename}'"]; return response()->file($temp_file, $headers)->deleteFileAfterSend(true); |
response()->file($temp_file, $headers)で、ファイルを指定したヘッダー情報で出力します。
このヘッダー情報が、ブラウザへ出力する為のポイントです。
->deleteFileAfterSend(true);を後ろに追加すると、出力した直後に一時ファイルを削除してくれます。
ファイルをダウンロードさせる場合
1 2 |
// ファイルダウンロード return response()->download($temp_file, $filename)->deleteFileAfterSend(true); |
response()->download($temp_file, $filename)で、ファイルダウンロードになります。
->deleteFileAfterSend(true);を後ろに追加すると、ダウンロードした直後に一時ファイルを削除してくれるのも、一緒ですね。