Ubuntu 16.04
需求:將復(fù)雜的展示頁(包含大量echarts)轉(zhuǎn)換成 PDF 供客戶下載
一缎玫、下載 wkhtmltopdf
網(wǎng)址 https://wkhtmltopdf.org/
這里注意選擇和自己服務(wù)器版本匹配的包
我的服務(wù)器是 ubunutu 16.04 64位 getconf LONG_BIT #查看位數(shù)
所以下載 Ubuntu 16.04 (xenial) amd64
執(zhí)行代碼下載包
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.xenial_amd64.deb
安裝.deb格式包
dpkg -i wkhtmltox_0.12.5-1.xenial_amd64.deb
如果提示缺少庫的話又谋,安裝對應(yīng)的庫
apt-get install libXrender*
apt-get install libssl*
二战转、安裝 laravel-snappy
擴展包
composer require barryvdh/laravel-snappy
將ServiceProvider添加到config / app.php中的providers數(shù)組
Barryvdh\Snappy\ServiceProvider::class,
添加facade到config / app.php中的aliases數(shù)組中
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
生成配置文件
php artisan vendor:publish"
具體配置如下
<?php
return array(
'pdf' => array(
'enabled' => true,
'binary' => '/usr/local/bin/wkhtmltopdf',
'timeout' => false,
'options' => array(),
'env' => array(),
),
'image' => array(
'enabled' => true,
'binary' => '/usr/local/bin/wkhtmltoimage',
'binary' => 'G:\wk\wkhtmltopdf\bin\wkhtmltoimage',
'timeout' => false,
'options' => array(),
'env' => array(),
),
);
三添祸、使用
# 下載
$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();
四、踩坑
中文字體問題
如果 windows
里的字體文件有 C:\Windows\Fonts\simsun.ttc
迫悠,直接上傳到服務(wù)器里的 /usr/share/fonts
里
如果沒有 simsun.ttc
這個字體文件携添,下載一個上傳
關(guān)于 Js 不生效問題
我需要轉(zhuǎn)成 pdf 的頁面有大量的 echarts
圖表, 有大量的 js 控制叛本,開始一個圖表都沒有顯示沪蓬,然后斷點測試法,發(fā)現(xiàn)我 js 里有一段代碼是用的 let
聲明的變量来候,改成 var 就好了跷叉。
所以,wkhtmltopdf
不支持 ecs6
PDF 分頁問題
使用 css 的 page-break-after:always;
或 page-break-inside:aovid;