• 技术文章 >php框架 >Laravel

    Laravel如何使用laravel-snappy包实现HTML转PDF和PNG

    藏色散人藏色散人2020-10-14 16:15:55转载100

    下面由Laravel教程栏目给大家Laravel使用laravel-snappy包实现HTML转PDF和PNG ,希望对需要的朋友有所帮助!

    前言

    由于公司要开发一个新的工具叫做云合同,可以预设好几套固定的合同模板(html页面),使用参数填充方式将合同内的数据灵活变化,然后生成 PDF 和 PNG
    查阅一番我们发现了 laravel-snappy 这个包,底层使用的是 wkhtmltopdfwkhtmltopdf 是构建于 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 = \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();

    踩坑记录

    一、当执行生成时若提示 libXrenderlibssl 库不存在需要安装相对应库

    //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

    以上就是Laravel如何使用laravel-snappy包实现HTML转PDF和PNG的详细内容,更多请关注php中文网其它相关文章!

    本文转载于:learnku,如有侵犯,请联系a@php.cn删除
    专题推荐:laravel
    上一篇:Sight!一个杀手级提升Laravel开发速度的组件现在开源了! 下一篇:教你用Laravel发一封“漂洋过海”的电子邮件
    第13期线上培训班

    相关文章推荐

    • 分享Laravel模型使用的2个小技巧• laravel系统自带的文件上传功能• 说说Laravel模型关联关系最单纯的“一对一”!• Sight!一个杀手级提升Laravel开发速度的组件现在开源了!

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网