当前位置: 首页 > news >正文

php html转pdf 简书,Laravel Html 导出 PDF 方案 ----- wkhtmltopdf laravel-snappy

Ubuntu 16.04

需求:将复杂的展示页(包含大量echarts)转换成 PDF 供客户下载

一、下载 wkhtmltopdf

网址 https://wkhtmltopdf.org/

这里注意选择和自己服务器版本匹配的包

我的服务器是 ubunutu 16.04 64位 getconf LONG_BIT #查看位数

所以下载 Ubuntu 16.04 (xenial) amd64

执行代码下载包

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

如果提示缺少库的话,安装对应的库

apt-get install libXrender*

apt-get install libssl*

二、安装 laravel-snappy 扩展包

composer require barryvdh/laravel-snappy

将ServiceProvider添加到config / app.php中的providers数组

Barryvdh\Snappy\ServiceProvider::class,

添加facade到config / app.php中的aliases数组中

'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,

'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,

生成配置文件

php artisan vendor:publish"

具体配置如下

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

# 渲染页面

$html = '

订单id

12346546

';

$pdf = \PDF::loadHTML($html);

return $pdf->inline();

四、踩坑

中文字体问题

如果 windows 里的字体文件有 C:\Windows\Fonts\simsun.ttc ,直接上传到服务器里的 /usr/share/fonts 里

如果没有 simsun.ttc 这个字体文件,下载一个上传

关于 Js 不生效问题

我需要转成 pdf 的页面有大量的 echarts 图表, 有大量的 js 控制,开始一个图表都没有显示,然后断点测试法,发现我 js 里有一段代码是用的 let 声明的变量,改成 var 就好了。

所以,wkhtmltopdf 不支持 ecs6

PDF 分页问题

使用 css 的 page-break-after:always; 或 page-break-inside:aovid;

相关文章:

  • aps.net的身份证背景图片
  • matlab怎么画lnx图像,inx图像(lnx的图像函数)
  • matlab计算结果中特别长,matlab运算结果太长Output truncated. Text exceeds maximum line length o......
  • java之注解
  • php 参数 过滤 类,参数过滤类
  • 还是畅通工程(HDU 1233)
  • mysql多表查询基础命令,MySql多表查询命令
  • B - Battle City bfs+优先队列
  • python中使用关键字声明一个函数,Python函数的说明与运用
  • BZOJ 3787 Gty的文艺妹子序列(分块+树状数组+前缀和)
  • 如何创建一个oracle新用户,如何创建Oracle新用户(新schema)
  • The.Glory.of.Innovation 创新之路2科学基石
  • oracle 增加 dbwr 性能,读书笔记-高级owi与oracle性能调整-io
  • c add oracle,oracle部署部分整理
  • 点分治题单(来自XZY)
  • 【node学习】协程
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Codepen 每日精选(2018-3-25)
  • es6(二):字符串的扩展
  • JavaScript设计模式与开发实践系列之策略模式
  • js中forEach回调同异步问题
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL的数据类型
  • Next.js之基础概念(二)
  • nodejs:开发并发布一个nodejs包
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • SpringBoot 实战 (三) | 配置文件详解
  • 记录:CentOS7.2配置LNMP环境记录
  • 力扣(LeetCode)22
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 深度学习中的信息论知识详解
  • 使用docker-compose进行多节点部署
  • 我的zsh配置, 2019最新方案
  • 由插件封装引出的一丢丢思考
  • ionic入门之数据绑定显示-1
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​Python 3 新特性:类型注解
  • ​香农与信息论三大定律
  • # 计算机视觉入门
  • #Linux(Source Insight安装及工程建立)
  • #每日一题合集#牛客JZ23-JZ33
  • #在 README.md 中生成项目目录结构
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (办公)springboot配置aop处理请求.
  • (差分)胡桃爱原石
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)详解PHP处理密码的几种方式
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 读取 JSON格式的数据