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>
あなたの回答
tips
プレビュー