总结一下laravel中进行PDF导出遇到的问题

最近的业务需求需要将数据导出成pdf,因为我使用的laravel框架,所以直接选择了最出名的 barryvdh/laravel-snappy composer扩展。


扩展安装

  • 首先直接执行以下命令安装snappy

    1
    composer require barryvdh/laravel-snappy
  • 然后安装需要的 wkhtmltopdf 和 wkhtmltoimage 依赖

    • 如果是32位操作系统

      1
      2
      composer require h4cc/wkhtmltopdf-i386 0.12.x
      composer require h4cc/wkhtmltoimage-i386 0.12.x
    • 如果是64位操作系统

      1
      2
      composer require h4cc/wkhtmltopdf-amd64 0.12.x
      composer require h4cc/wkhtmltoimage-amd64 0.12.x
  • 然后打开config/app.php,将以下代码添加到 providers 数组中
    Barryvdh\Snappy\ServiceProvider::class,

    再将以下代码添加到 Facade 中

    1
    2
    'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
    'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
最后执行以下命令,生成配置文件

` php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider" `
  • 打开config/snappy.php文件,将pdf数组中的值修改如下

    'binary' => base_path('vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64'),

    如果需要使用image功能,同理进行修改image数组内容
    'binary' => base_path('vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64'),

    然后就可以进行pdf导出了。


导出中遇到的问题

  • 导出pdf中文乱码问题

    • 首先需要下载一个支持中文的字体包,比如微软雅黑
    • 然后在/usr/share/fonts目录中新建一个文件夹,例如文件夹名为chinese
    • 将下载好的字体文件移动到新建的文件夹中
    • 然后执行以下命令安装字体

      1
      2
      3
      mkfontscale
      mkfontdir
      fc-cache
    • 至此再导出时候就会发现一切正常了

  • 设置分页问题,为了防止饼状图等图形被切开,可以手动设置分页

    • 首先在html中添加如下代码

      avatar

    • 然后在每个需要分页部分的开头,加入div

      avatar

  • 设置页码

    • 如需要导出的pdf上自动显示页码则需要在导出时进行设置

      avatar

      如果需要调整页码位置,将 font-center 修改为 font-right 或者 font-left 即可

  • echarts导出不显示或者不完整问题

    • 因为echarts默认带有动画,只需关闭echarts动画即可,在设置中加入 animation: false

      avatar