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

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

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

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

PDF

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

PHP

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

Q&A

0回答

1657閲覧

laravel-domodfにおいて、base64した画像が表示されない

higehige

総合スコア12

Laravel

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

PDF

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

PHP

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

0グッド

0クリップ

投稿2021/03/28 13:20

Laravelにて、ブラウザの特定の領域をキャプチャしてPDF化するシステムを作っています。

「html2canvas」を使用して、サーバに画像を保存。
セキュリティ観点からhttpアクセスで表示されないように、コントローラ でbase64エンコードをしてPDF生成用のビューに表示して、PDF化を試みています。

return view()でPDF用のビューをシンプルに開いた場合は、問題なくbase64エンコードをした画像が表示されていることが確認できています。

しかし、そのreturn view()では問題なかった同じPDF用のビューをPDFダウンロードしようとすると、PDFでは真っ白で表示されない状況です。

試したこととしては、そのPDF用のビューにbase64エンコードではなく、パス指定で一般の画像を設置した場合は、その画像は正常にPDF化されます。

その他、テキストなども問題なくPDF化されるため、base64エンコードの画像だけが表示されないようです。

1日ソースと睨めっこしましたが、どうしても解決できませんため、お力をお借りできますと幸いです。

以下が、コントローラ です。

php

1 public function pdf_download(Request $request) { 2 // 画像を取得 3 $data = Report::selectRaw('img')->where('report_id',$request->rid)->get(); 4 $reports = []; 5 foreach($data as $row){ 6 $reports[] = base64_encode(File::get(storage_path().'/app/data/report/'.$row->img)); 7 } 8 // PDFを生成 9 $pdf = \PDF::loadView('pdf_generater',['reports'=>$reports])->setPaper('a4', 'landscape'); 10     // 真っ白なPDFが表示されてしまう 11 return $pdf->stream('title.pdf'); 12 13     // 以下のようにreturnでviewをひらけば、普通に表示される 14 // return view('pdf_generater',[ 15 // 'reports'=>$reports 16 // ]); 17 }

念のため、PDF用のビューのソースも記載します

html

1<!doctype html> 2<html style="margin:0px"> 3<head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <style type="text/css"> 6 @font-face { 7 font-family: ipag; 8 font-style: normal; 9 font-weight: normal; 10 src: url('{{ storage_path('fonts/ipag.ttf') }}') format('truetype'); 11 } 12 @font-face { 13 font-family: ipag; 14 font-style: bold; 15 font-weight: bold; 16 src: url('{{ storage_path('fonts/ipag.ttf') }}') format('truetype'); 17 } 18 body { 19 font-family: ipag !important; 20 } 21 /* laravel dompdfの改ページ用のclass */ 22 .page-break { 23 page-break-after: always; 24 } 25 </style> 26</head> 27<body> 28 @foreach($reports as $report) 29 <div class="page-break"> 30 <img src="data:image/png;base64,{{ $report }}" alt="" style="margin: 0px 0px 0px 0px;width:100%;height:100%"> 31 </div> 32 @endforeach 33</body> 34</html>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問