Laravel Html 導(dǎo)出 PDF 方案 ----- wkhtmltopdf laravel-snappy

Ubuntu 16.04

需求:將復(fù)雜的展示頁(yè)(包含大量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
如果提示缺少庫(kù)的話,安裝對(duì)應(yīng)的庫(kù)
apt-get install libXrender*
apt-get install libssl*

二、安裝 laravel-snappy 擴(kuò)展包

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');

# 渲染頁(yè)面
$html = '<html><head><meta charset="utf-8"></head><h1>訂單id</h1><h2>12346546</h2></html>';
$pdf = \PDF::loadHTML($html);
return $pdf->inline();

四、踩坑

中文字體問(wèn)題
如果 windows 里的字體文件有 C:\Windows\Fonts\simsun.ttc ,直接上傳到服務(wù)器里的 /usr/share/fonts
如果沒(méi)有 simsun.ttc 這個(gè)字體文件,下載一個(gè)上傳

關(guān)于 Js 不生效問(wèn)題
我需要轉(zhuǎn)成 pdf 的頁(yè)面有大量的 echarts 圖表, 有大量的 js 控制,開(kāi)始一個(gè)圖表都沒(méi)有顯示,然后斷點(diǎn)測(cè)試法,發(fā)現(xiàn)我 js 里有一段代碼是用的 let 聲明的變量,改成 var 就好了。
所以,wkhtmltopdf 不支持 ecs6

PDF 分頁(yè)問(wèn)題
使用 css 的 page-break-after:always;page-break-inside:aovid;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容