本教程意在解决laravel6以上版本按照laravel-dompdf官方文档无法实现pdf导出成功的问题。
laravel转pdf,laravel实现html转pdf,laravel生成pdf
安装
使用composer进行安装
composer require barryvdh/laravel-dompdf
配置
在config/app.php的providers数组中注册laravel-dompdf的服务提供者
'providers' => [ .... Barryvdh\DomPDF\ServiceProvider::class, ],
在config/app.php的aliases数组中注册laravel-dompdf的门面
'aliases' => [ .... 'PDF' => Barryvdh\DomPDF\Facade::class, ],
关键配置
这一步的配置是区别于laravel5.*的,所以在laravel6以上版本使用laravel-dompdf的要特别注意
在bootstrap/app.php中添加如下代码进行服务绑定
... $app->singleton(\Barryvdh\DomPDF\ServiceProvider::class); return $app;
资源发布
使用如下命令发布laravel-dompdf资源,会在config目录下产生一个配置文件如图
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
使用
注册路由
Route::get('/test_report_download', 'TestController@reportDownload');
在相应控制器方法中实现转换下载
- loadView方法与laravel的视图渲染方法完全一致,第一个参数为视图模板,第二个参数为传递到视图中的数据
- 视图模板中尽量不要使用flex进行布局,否则页面效果可能会没那么好
- 推荐使用table布局,这样下载下来的报告更加美观,样式直接使用css进行控制就好
<?php use PDF; class TestController{ public function reportDownload () { $testReport = ["one"=>1, "two"=>2]; $pdf = PDF::loadView("fs.test_pdf_report", ["data"=>$testReport]); return $pdf->download("测试报告".date("YmdHis").".pdf"); } }
视图模板resources/fs/test_pdf_report.blade.php
<h3>测试报告</h3> <table> <tr> <td>{{$data['one']}}</td> <td>{{$data['two']}}</td> </tr> </table>
中文乱码解决方案
- 解决方案:https://github.com/fourtwothree/daily-code/issues/1
- load_font.php下载地址:https://github.com/dompdf/utils/blob/master/load_font.php
- 字体下载(宋体):https://ufonts.com/download/simsun.html
参考
项目地址:https://github.com/barryvdh/laravel-dompdf
6.0参考地址:https://hackthestuff.com/article/laravel-6-how-to-generate-html-to-pdf-with-laravel-dompdf