后端队列生成pdf,发送到邮箱

最开始可以先将你想要的pdf模板写好先,如testPage

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{{$data[['title']}}</title>
<style type="text/css">

* {
    font-family: 'Arial', sans-serif;
  }
ul li{
    list-style:none;
    float:left;
   }
div li{
  list-style:none;
  margin-left:50px
}
  table {
    border:1px solid black;
  }
  table th{
    border:1px solid black;
  }
  table td{
    border:1px solid black;
    word-wrap: break-word;
    word-break: break-all;
  }
  .header{
    width:100%;
    height:800px;
    text-align:center
  }
</style>

</head>

<body>

<div class="header">
 <div style="text-align:center">
 </div>
  <table style="width:100%;" cellspacing="0">
  <tr>
    <th colspan="5"><h1>{{$data['testPager']['exam_page']['title']}}</h1></th>
  </tr>
  <tr>
    <th colspan="3" style="text-align:left"><h3>Shop:  {{$data['testPager']['pagerable']['name']}}</h3></th>
    <th colspan="2"><h3>Total Score</h3></th>
   </tr>
   <tr>
    <!-- <th>No</th> -->
    <th colspan="3" style="text-align:left"><h3>Date</h3></th>
    <th colspan="2" style="font-color:red"><font color="red">{{$data['score']}}</font></th>
   </tr>
   <tr>
    <th>No</th>
    <th>Category</th>
    <th>Details</th>
    <th>Point</th>
    <th>Score</th>
   </tr>
   @foreach($data['page_content'] as $key=>$value)        
   <tr>
    <td>{{$key+1}}</td>
    <td>{{$value['title']}}</td>
    <td style="text-align:left">{{$value['description']}}</td>
    <td>{{$value['point']}}</td>
    <td><font color="red">{{$value['score']}}</font></td>
   </tr>
   @endforeach
  </table>
 </div>
</div>

</body>
<script language="JavaScript" type="text/javascript">
</script>
</html>

 

1.后端控制器获取数据,分派队列任务,将获取的数据传到队列中去

$user = User::all()->toArray();

dispatch(new TestPdf($user));  //TestPdf()为创建的队列
2.TestPdf()队列中生成pdf数据
$pdf = PDF::loadView('pdfTemplate.testPage',compact('data'))->setPaper('a4'); //pdfTemplate.testPage为views目录下的视图文件,compact('data')是传到pdf中的数据,
setPaper('a4')设置pdf的大小
//将pdf发送到1093684305@qq.com的邮箱
Mail::to('1093684305@qq.com')->send(new ReportPage($pdf,$user));
3.创建Mail类
php artisan make:mail ReportPage    //在根目录下的app下的Mail目录生成ReportPage.php文件
class ReportPage extends Mailable
{
    use Queueable, SerializesModels;
    // protected $data;
    protected $pdf;  //传递过来的pdf原数据
    protected $data;  //pdf的变量数据
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($pdf,$data)
    {
        $this->data = $data;
        $this->pdf = $pdf;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
    //发送邮件视图testPage时,data数据也要传到视图中去,output()是pdf原数据,testPage.pdf发送到邮箱的pdf文件名字
return $this->view('pdfTemplate.testPage',['data'=>$this->data]) ->subject('testPage') //邮件主题,即收到邮件时邮件的名字 ->attachData($this->pdf->output(), 'testPage.pdf', [ 'mime' => 'application/pdf' ]); } }

 

posted @ 2020-08-27 17:33  小林不会飞  阅读(457)  评论(0编辑  收藏  举报