Laravel で PDF ファイルをブラウザで開く
はじめに
Laravel で PDF ファイルをブラウザで開く方法を整理した。
PDF ファイル自体は Laravel が動作するサーバ内だったり、S3 だったりに置いてある想定。
TL;DR
Storage::disk()->get()
で PDF ファイルを取得response
に PDF ファイルを設定header
でContent-type: application/pdf
とContent-disposition
を指定
目次
環境・条件
1 | $ grep -i pretty /etc/os-release |
確認: Chrome 79.0.3945.130(Official Build) (64 ビット)
詳細
準備
動作確認用に 表示確認用サンプル PDF を適当な場所に格納。
今回は Laravel サーバの storage/app/pdf/my_file.pdf
に配置した。
前提知識
PDF ファイルをブラウザで開かせるには Content-Type: application/pdf
として、レスポンスを返却すればよい。
保存時のデフォルトのファイル名を指定するには、あわせて Content-description: inline; filename="my_file.pdf"
を指定する。
なお Content-description: attachment;
にすると、ダウンロードが行われるようになる。
PDF 表示コード
Laravel で PDF を表示するコード
ルーティング
実運用では、添付ファイルの識別子(連番とか UUID とか)を使って、表示するファイルを切り替えることになると思うが、今回は適当。
1 | Route::get('my_pdf', 'PdfController@show')->name('pdf.show'); |
コントローラ
Illuminate\Support\Facades\Storage
を使って PDF ファイルを取得response
に PDF ファイルを指定header
で以下を設定Content-Type: application/pdf
Content-description: inline; filename="my_file.pdf"
filename
は保存時のデフォルトファイル名になる
1 |
|
他のやり方
ローカルのファイルを表示するだけなら、response()->file()
だけで良きにはからってくれるっぽい。
※S3 のファイルでもいけるのかは不明
1 | public function show() |
動作確認
これで /my_pdf
にアクセスすると下記のように表示されるはず。
まとめ
Storage::disk()->get()
で PDF ファイルを取得response
に PDF ファイルを設定header
でContent-type: application/pdf
とContent-disposition
を指定
参考文献
- How to View a PDF file in the browser
- php - Laravel - display a PDF file in storage without forcing download? - Stack Overflow
- PDFをブラウザで表示 - Qiita
- File Storage - Laravel - The PHP Framework For Web Artisans
- Content-Type - HTTP | MDN
- MIME タイプの不完全な一覧 - HTTP | MDN
- Content-Typeの一覧 - Qiita
- Content-Disposition - HTTP | MDN
関連記事
- Laravel で現在の URL 取得方法まとめ
- Laravel で Cookie を使う(参照/設定/削除)
- Laravel で withCount と having を使って絞り込み
- Laravel で「開始日時 < 終了日時」であることをバリデーションする
- Laravel で生 SQL を実行
- Laravel で有効期限付きの一次的な URL を生成してメールで送信する
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア