質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5310閲覧

iOSのGoogle ChromeでLaravelで生成したpdfファイルをダウンロードできない

Koe

総合スコア0

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/10/22 08:02

編集2020/10/23 02:11

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/22 08:52

ファイル名を半角英数にした場合はどうでしょうか
Koe

2020/10/22 08:59

ご回答ありがとうございます????‍♂️ 先ほど試したところ、変わらずでした....
m.ts10806

2020/10/22 09:57

なるほど。私はiPhoneユーザーではないので試せないですが、ブラウザ依存の可能性はなくもないですね。 シェア的にiPhone+Chromeは少数派のようなので、どこまで救うかですね。 https://websas.jp/column/browser-share_07 あとはpdf直ではなくzipにしてみるとか・・
Koe

2020/10/22 13:51

シェア率まで出していただいて.... ありがとうございます????
mix-peach

2020/10/23 01:18

試したことの「laravelのstorageに保存後、storageからpdfをdownloadさせる 」はどんなコードで確認されましたか? それと、現状提示されているコードの、「->header('Content-Type', 'application/force-download')」を追加しないと「ダウンロードが始まらない」のも、iphone&Chromeの場合だけ、でしょうか?
Koe

2020/10/23 02:13

「laravelのstorageに保存後、storageからpdfをdownloadさせる 」 こちらコードを追記致しましたのでご確認いただければと思います????‍♂️ 「->header('Content-Type', 'application/force-download')」を追加しないと「ダウンロードが始まらない」 こちらはiphone/safari, iphone/firefox, iphone/chromeで起きております。
guest

回答2

0

storageに物理ファイルを保存する方で、
レスポンスの返し方を変えてみたら、解決したりしないでしょうか?

php

1$file_path = 'ダウンロードさせたいファイルのパス'; 2$download_file_name = 'ダウンロード時のファイル名'; 3return response()->download($file_path, $download_file_name);

ちなみに、これで上手くいくならば、
ダウンロード用に作ったローカルの物理ファイルが不要であれば、
ダウンロード後にファイルを自動的に削除させることもできると思います。

php

1return response()->download($file_path, $download_file_name)->deleteFileAfterSend();

お試しください。

投稿2020/10/23 07:58

編集2020/10/23 08:07
mix-peach

総合スコア1910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Koe

2020/10/23 08:59

丁寧なご回答ありがとうございます????‍♂️ 試した結果、変わらずでした。。。
guest

0

自己解決

aタグに画像ルートを埋め込む

aタグ押下

でDLが開始されました

View側

php

1<a href="{{ storageのファイル取得ルート }}" target="_blank">PDFをダウンロードする</a>

controler側

php

1return response($file)->header('Content-type','image/' . end($ext));

投稿2020/10/23 10:22

編集2020/10/25 09:02
Koe

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問