寫在前面:最近項目中要使用到導出把網頁導出到圖表的問題,本來以為隨便找一個第三方的東西就可以搞定,不過因為網頁中有一些圖表,所有遇到了很多的坑,最后決定使用wkhtmltopdf,因為它是用Qt WebKit 引擎做渲染雖然也有一些坑,但是可以滿足需求了,下面就是一些記錄。
安裝wkhtmltopdf
wkhtmltopdf是一個可以執行的二進制文件,使用php調用系統的命令來執行。php用composer可以很容易的安裝,也可以在網站上面直接下載然后安裝,傳送門
// 用到的composer包
https://packagist.org/packages/knplabs/knp-snappy
https://github.com/KnpLabs/snappy
// 項目是用yii1.0開發
https://packagist.org/packages/dmitrivereshchagin/yii-snappy
https://github.com/dmitrivereshchagin/yii-snappy
// 具體的版本
composer require symfony/process 2.8.32
composer require knplabs/knp-snappy 0.4.2
composer require h4cc/wkhtmltopdf-amd64 0.12.x
目前並沒有深入的研究很多的用法,先來簡單的記錄一下,用php的knp-snappy來操作wkhtmltopdf的過程以及遇到的坑。
簡單的使用
class CPDF
{
public static function getPdf()
{
Yii::import('application.vendor.autoload', true);
$binaryPath = Yii::app()->params['pdfBinaryPath'];
$pdf = new \Knp\Snappy\Pdf($binaryPath);
$pdf->setOption('page-size', 'A3');
$pdf->setOption('no-background', true);
return $pdf;
}
public static function export($fileName, $html)
{
$pdf = self::getPdf();
$pdf = $pdf->getOutputFromHtml($html);
Yii::app()->request->sendFile($fileName, $pdf);
}
}
可能會遇到的坑
1、導出的pdf中沒有中文字體,這個是因為需要在系統安裝一個字體,現在用的linux,默認的字體路徑是/usr/share/fonts,字體文件可以從windows系統中的字體拷貝。
2、導出半截失敗,可能是因為網頁中包含了相對地址的資源。
3、需要執行的權限,沒有權限白扯
4、使用hcharts有一個動畫效果,直接導出會出現圖表是半個的情況,需要關掉動畫的效果。
5、分頁標識
<div style="page-break-after:always"></div>
最后附上一個比較詳細的說明吧,傳送門