前言
由於公司要開發一個新的工具叫做雲合同,可以預設好幾套固定的合同模板(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::loadView('welcome', $data);
return $pdf->download('welcome.pdf');
//二、渲染頁面,在瀏覽器中顯示
$html = '<html><head><meta charset="utf-8"></head><h1>訂單id</h1><h2>12346546</h2></html>';
$pdf = \PDF::loadHTML($html);
return $pdf->inline();
Image
//一、下載
$img = \SnappyImage::loadView('welcome', $data);
return $img->download('welcome.png');
//二、渲染頁面,在瀏覽器中顯示
$html = '<html><head><meta charset="utf-8"></head><h1>訂單id</h1><h2>12346546</h2></html>';
$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
通過上圖,我們可以很明顯的看出中文字型已經成功安裝。
本作品採用《CC 協議》,轉載必須註明作者和本文連結