首頁 > php框架 > Laravel > 主體

Laravel如何使用laravel-snappy套件實現HTML轉PDF和PNG

藏色散人
發布: 2020-10-14 16:15:55
轉載
2983 人瀏覽過

前言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 陣列

Barryvdh\Snappy\ServiceProvider::class,
登入後複製
2、將Facades 新增至config/app. php 中的aliases 數組中
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
登入後複製
3、生成配置文件

php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
登入後複製

注意:config 資料夾中的snappy.php 就是其配置文件,binary 指向的就是上面安裝的wkhtml 相關路徑.

使用

PDF

//一、下载
$pdf = \PDF::loadView('welcome', $data);
return $pdf->download('welcome.pdf');

//二、渲染页面,在浏览器中显示
$html = &#39;<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>&#39;;
$pdf = \PDF::loadHTML($html);
return $pdf->inline();
登入後複製

Image

//一、下载
$img = \SnappyImage::loadView(&#39;welcome&#39;, $data);
return $img->download(&#39;welcome.png&#39;);

//二、渲染页面,在浏览器中显示
$html = &#39;<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>&#39;;
$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:\Windows\Fonts
登入後複製

將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
登入後複製

以上是Laravel如何使用laravel-snappy套件實現HTML轉PDF和PNG的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板