前提・実現したいこと
Laravelのライブラリ'dompdf'で生成したPDFを
iPhone端末のGoogle Chromeでダウンロードできるようにしたい。
発生している問題・エラーメッセージ
ダウンロードは完了するがダウンロードしたPDFファイルを確認すると、
- ファイルサイズが以上に小さい。
- ファイルの中身を確認できない(ファイルを開くとPDF書類とだけ表示される)
該当のソースコード
PHP
1public function generatePdf() 2{ 3 $data = 'some data' // bladeで使用する変数 4 $pdf = \PDF::loadView('receipt', compact('data'))->setPaper('b5', 'landscape'); 5 6 return $pdf->download('領収書.pdf') 7 ->header('Content-Type', 'application/pdf') 8 ->header('Content-Type', 'application/force-download') // このcontent-typeを指定しないとDLが始まらない 9 ->header('Content-Disposition', 'inline; filename="領収書.pdf"'); 10}
試したこと
- 異なるOS、ブラウザで検証済み → 正常に動作
- public/ にpdfファイルを配置し直接urlを叩きファイルを表示 → DLできたが好ましくない
- ブラウザのキャッシュ削除
- SSL導入(セキュリティの問題)
- laravelのstorageに保存後、storageからpdfをdownloadさせる
PHP
1$disk = 'local'; // or 's3' 2$storage = Storage::disk($disk); 3$file_name = 'my_file.pdf'; 4$pdf_path = 'pdf/' . $file_name; 5$file = $storage->get($pdf_path); 6return response($file, 200) 7 ->header('Content-Type', 'application/pdf') 8 ->header('Content-Type', 'application/force-download') 9 ->header('Content-Disposition', 'attachment; filename="' . $file_name . '"');
- header()の値を追加、変更(Content-length等)
補足情報(FW/ツールのバージョンなど)
- Laravel Framework 6.17.1
- barryvdh/laravel-dompdf: ^0.8.6
- nginx
- iOS 14.1
- Google Chrome 86.0.4240.93

回答2件
あなたの回答
tips
プレビュー