使用wkhtmltopdf的一些事情

时间:2021-07-18 05:22:18

写在前面:最近项目中要使用到导出把网页导出到图表的问题,本来以为随便找一个第三方的东西就可以搞定,不过因为网页中有一些图表,所有遇到了很多的坑,最后决定使用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有一个动画效果,直接导出会出现图表是半个的情况,需要关掉动画的效果。

最后附上一个比较详细的说明吧,传送门