#はじめに
Laravel-dompdf
パッケージを用いてPDFダウンロードはできましたが、
そこになかなか画像を表示させることができなかったのでその方法です。
#画像表示されない
通常画像を表示させるには以下にのようにimgダグ
を使用します。
<img src="(画像のURL)">
PDFダウンロードさせたいblade
ファイルにこのように記述しても画像は表示されません。
これは最初にblade
ファイルを読み込みそのあとに画像ファイルを読み込みにいく動作をするのですが、
このパッケージが画像ファイルを読み込めないようです(権限か何か問題だと思われる・・・)
#対応方法
以上のような理由で表示されないので、ビューを渡すときに画像データも一緒に渡してあげるようにします。
方法はbase64_encode()
でウェブページに直接埋め込むようにします。
具体的なコードは以下。
$image_path = storage_path('image/sample.png');
$image_data = base64_encode(file_get_contents($image_path));
$pdf = PDF::loadView('(Bladeファイル)', compact('image_data',....))
->setPaper('a4', 'landscape');
$pdf->download('(ファイル名)');
<img src="data:image/png;base64,{{ $image_data }}">
コントローラーで画像データをエンコードします。
今回はstorage
配下にimageデェレクトリーを作り画像ファイルと置いている状況です。
storage_path()
で画像データのパスを取得し、
file_get_contents()
でファイルそのものを取得、
base64_encode()
でファイルをエンコードし、Blade
ファイルへ渡す。
Blade
ファイル側で上記のような記述をすると画像ファイルが展開され表示されるようになります。
正常に表示されるようになり「ほ」っとしました。
ちなみにjpag
ファイルならpng
と記載の箇所を書き換えたらできます!