下面由laravel教程欄目給大家Laravel使用laravel-snappy包實現HTML轉PDF和PNG ,希望對需要的朋友有所幫助!
前言
由于公司要開發一個新的工具叫做云合同,可以預設好幾套固定的合同模板(html頁面),使用參數填充方式將合同內的數據靈活變化,然后生成 PDF 和 PNG
查閱一番我們發現了 laravel-snappy 這個包,底層使用的是 wkhtmltopdf,wkhtmltopdf 是構建于 QT Webkit 之上,而 QT Webkit 又是基于 Webkit 的,跟我們的瀏覽器一樣的渲染引擎。
安裝
1、先查看系統是 32 位的還是 64 位的
uname -a
2、通過 composer 安裝 wkhtmltopdf
立即學習“前端免費學習筆記(深入)”;
32位: $?composer?require?h4cc?/?wkhtmltopdf-i386?0.12.x $?composer?require?h4cc?/?wkhtmltoimage-i386?0.12.x 64位: $?composer?require?h4cc/wkhtmltopdf-amd64?0.12.x $?composer?require?h4cc/wkhtmltoimage-amd64?0.12.x
3、接下來將安裝好的 wkhtmltopdf 復制到 Linux 系統可執行命令的目錄中
cp?vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64?/usr/local/bin/ cp?vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64?/usr/local/bin/ //并使其可執行: chmod?+x?/usr/local/bin/wkhtmltoimage-amd64? chmod?+x?/usr/local/bin/wkhtmltopdf-amd64
4、安裝 laravel-snappy 包
composer require barryvdh/laravel-snappy
配置
1、將 ServiceProvider 添加到 config/app.php 中的 providers 數組中
BarryvdhSnappyServiceProvider::class,
2、將 Facades 添加到 config/app.php 中的 aliases 數組中
'PDF'?=>?BarryvdhSnappyFacadesSnappyPdf::class, 'SnappyImage'?=>?BarryvdhSnappyFacadesSnappyImage::class,
3、生成配置文件
php artisan vendor:publish --provider="BarryvdhSnappyServiceProvider"
注意:config 文件夾中的 snappy.php 就是其配置文件,binary 指向的就是上面安裝的 wkhtml 相關路徑.
使用
//一、下載 $pdf?=?PDF::loadView('welcome',?$data); return?$pdf->download('welcome.pdf'); //二、渲染頁面,在瀏覽器中顯示 $html?=?'<meta><h1>訂單id</h1><h2>12346546</h2>'; $pdf?=?PDF::loadHTML($html); return?$pdf->inline();
Image
//一、下載 $img?=?SnappyImage::loadView('welcome',?$data); return?$img->download('welcome.png'); //二、渲染頁面,在瀏覽器中顯示 $html?=?'<meta><h1>訂單id</h1><h2>12346546</h2>'; $img?=?SnappyImage::loadHTML($html); return?$img->inline();
踩坑記錄
一、當執行生成時若提示 libXrender 或 libssl 庫不存在需要安裝相對應庫
//apt-get?安裝方法 apt-get?install?libXrender* apt-get?install?libssl* //yum?安裝方法 yum?install?libXrender* yum?install?libssl* //若?yum?安裝時最后報錯?Error:?GPG?check?FAILED yum?install?libXrender*?--nogpgcheck yum?install?libssl*?--nogpgcheck
二、中文顯示亂碼問題,這個問題需要在 Linux 中安裝中文字體即可解決
查看系統字體
在開始安裝之前,我們先查看系統中已經安裝的字體,要查看系統中已經安裝的字體,我們可以使用 fc-list 命令進行查看,如果系統中沒有該命令的話,我們需要先安裝相關的軟件包。
在 centos 上,使用如下命令進行安裝:
yum install -y fontconfig mkfontscale
安裝完畢后,我們可以來查看系統中已經安裝的字體
[root@8d079be5059a?php]#?fc-list /usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf:?Nimbus?Mono?PS:style=Italic /usr/share/fonts/urw-base35/D050000L.t1:?D050000L:style=Regular ...
如果要查看系統中已經安裝的中文字體,我們可以使用如下命令
[root@8d079be5059a php]# fc-list :lang=zh
通過上圖我們可以看到系統中是沒有中文字體的
我們進入 Windows 的 字體目錄
C:WindowsFonts
將 simfang.ttf 字體遠程復制或者以其他方式放到服務器的字體目錄中
//遠程復制 scp simfang.ttf root@ip:/usr/share/fonts
然后建立字體索引信息,更新字體緩存
cd /usr/share/fonts/mkfontscale mkfontdir fc-cache
至此,字體已經安裝完畢。現在我們再來查看中文字體,是否安裝成功
[root@8d079be5059a?php]#?fc-list?:lang=zh /usr/share/fonts/simfang.ttf:?FangSong,仿宋:style=Regular,Normal,oby?ejné,Standard,Κανονικ?,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta