4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel-dompdfパッケージで画像表示させる方法

Posted at

#はじめに
Laravel-dompdfパッケージを用いてPDFダウンロードはできましたが、
そこになかなか画像を表示させることができなかったのでその方法です。

#画像表示されない

通常画像を表示させるには以下にのようにimgダグを使用します。

<img src="(画像のURL)">

PDFダウンロードさせたいbladeファイルにこのように記述しても画像は表示されません。
これは最初にbladeファイルを読み込みそのあとに画像ファイルを読み込みにいく動作をするのですが、
このパッケージが画像ファイルを読み込めないようです(権限か何か問題だと思われる・・・)

#対応方法
以上のような理由で表示されないので、ビューを渡すときに画像データも一緒に渡してあげるようにします。
方法はbase64_encode()でウェブページに直接埋め込むようにします。

具体的なコードは以下。

downloadController.php
$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('(ファイル名)');
pdf.blada.php
<img src="data:image/png;base64,{{ $image_data }}">

コントローラーで画像データをエンコードします。
今回はstorage 配下にimageデェレクトリーを作り画像ファイルと置いている状況です。
storage_path()で画像データのパスを取得し、
file_get_contents()でファイルそのものを取得、
base64_encode()でファイルをエンコードし、Bladeファイルへ渡す。

Bladeファイル側で上記のような記述をすると画像ファイルが展開され表示されるようになります。
正常に表示されるようになり「ほ」っとしました。

ちなみにjpagファイルならpngと記載の箇所を書き換えたらできます!

4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?