tp5使用mpdf生成pdf文件时,碰到division by zero问题解决记录
首先标明一下运行环境 tp5框架,PHP5.6+mpdf6.1.3,另外问题和获取到的html字符串有关系,普通字符串运行正常!!!
本来笔者是使用的PHP7.1的环境,运行mpdf8.0.5版本无压力,后来服务器环境所限,只能换成6.1版本,在此记录一下使用方法。
1、获取HTML页面,也可以使用纯手写方式。。。
$url = '****';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 已经获取到内容,没有输出到页面上。
$html = curl_exec($ch);
curl_close($ch);
2、调用mpdf生成文件
//设置中文编码$mpdf= new \mPDF('zh-CN','A4','', 'dejavusans', 20,20,20,20);//设置中文字体$mpdf->autoScriptToLang = true;$mpdf->autoLangToFont = true;$mpdf->useAdobeCJK = TRUE;$mpdf->SetDisplayMode('fullpage');$mpdf->SetHTMLHeader('');$mpdf->SetHTMLFooter('');$mpdf->WriteHTML($html);//D是在浏览器生成pdf文件另存为 I是直接显示生成的pdf文件$mpdf->Output($file_path,'F');
运行时报错division by zero,询问度娘找到少量资料,在坑里蹲了一天,想起来去github去看看问题,发现是旧版本代码问题,新版已修复,所以找到了最新版代码加到了旧版中
$target = $h / $w;
在mpdf.php类中找到这句话,然后后面运行代码加上非零判断即可。
if ($overflow != 'hidden' && $overflow != 'visible') {$target = $h / $w;if ($target > 0) {if (($ratio / $target) > 1) {$nl = CEIL($actual_h / $this->lineheight);$l = $use_w * $nl;$est_w = sqrt(($l * $this->lineheight) / $target) * 0.8;$use_w += ($est_w - $use_w) - ($w / 100);}$bpcstart = ($ratio / $target);$bpcctr = 1;while (($ratio / $target) > 1) {if ($this->progressBar) {$this->UpdateProgressBar(4, intval(100 / ($ratio / $target)), ('Auto-sizing fixed-position block: ' . $bpcctr++));} // *PROGRESS-BAR*$this->x = $x;$this->y = $y;if (($ratio / $target) > 1.5 || ($ratio / $target) < 0.6) {$use_w += ($w / $this->incrementFPR1);} elseif (($ratio / $target) > 1.2 || ($ratio / $target) < 0.85) {$use_w += ($w / $this->incrementFPR2);} elseif (($ratio / $target) > 1.1 || ($ratio / $target) < 0.91) {$use_w += ($w / $this->incrementFPR3);} else {$use_w += ($w / $this->incrementFPR4);}$use_h = $use_w * $target;$this->rMargin = $this->w - $use_w - $x;$this->pgwidth = $this->w - $this->lMargin - $this->rMargin;$this->HTMLheaderPageLinks = array();$this->HTMLheaderPageAnnots = array();$this->HTMLheaderPageForms = array();$this->pageBackgrounds = array();$this->WriteHTML($html, 4); // parameter 4 saves output to $this->headerbuffer$actual_h = $this->y - $y;$ratio = $actual_h / $use_w;}}if ($this->progressBar) {$this->UpdateProgressBar(4, '100', ' ');} // *PROGRESS-BAR*
}
笔者是compose安装的,代码可能和手动下载的mpdf版本略有区别
tp5使用mpdf生成pdf文件时,碰到division by zero问题解决记录相关推荐
- php mpdf例子,yii2使用mpdf生成PDF文件
yii2里面带有生成PDF的插件,我们通过安装就可以使用. 参考地址:(https://github.com/mpdf/mpdf) https://mpdf.github.io/ 通过comp ...
- 使用mpdf生成pdf文件
本文主要需求是将html页面转换为pdf文档 1.安装mpdf工具类 (composer方式) composer require mpdf/mpdf:8.0.3 2.控制器里调用 <?php/* ...
- 【PHP】使用mpdf生成pdf文件
本文主要需求是将html页面转换为pdf文档 1.安装mpdf工具类 (composer方式) composer require mpdf/mpdf:8.0.3 2.控制器里调用 <?phppu ...
- PHP使用mpdf生成PDF文件
mpdf/mpdf 6.1.0 GitHub https://github.com/mpdf/mpdf <?php// 导出PDFrequire_once __DIR__ . '/vendor/ ...
- springboot 基于.ftl模板生成pdf文件
目录 Demo前置简述 生成pdf内容 项目结构 主要实现 api测试 完整代码地址 Demo前置简述 实现功能:用户个人信息测试数据加上ftl模板得到html字符串,然后根据html字符串生成pdf ...
- PHP中使用mpdf导出PDF文件以及生成PDF的方法
电子书内容介绍了关于PHP.核心技术.实践方面的内容,目前豆瓣.亚马逊.当当.京东等电子书综合评分为:7.1 PHP中使用mpdf 导出PDF文件的实现方法 mPDF是一个很强大的PDF生成库,能基本 ...
- 生成PDF文件方案--学习中
PDF文件是目前比较流行的电子文档格式,在办公自动化(OA)等软件的开发中,经常要用到该格式,但介绍如何制作PDF格式文件的资料非常少,在网上搜来搜去,都转贴的是同一段"暴力"破解 ...
- 导出pdf文件时加图片水印
前言:本文探讨的是利用pageEvent事件在生成PDF文件的过程中把图片水印加好,这样导出的是加好水印的pdf文件. 1:加入依赖 <!--导出pdf相关--><dependenc ...
- Itext生成pdf文件,itext+Freemarker生成pdf,(中文空白解决)
来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...
- freemarker模板生成pdf文件
文章目录 1.pom依赖 2.ftl模板以及宋体文件 2.1.文件路径 2.2.ftl文件模板(test.ftl) 3.controller生成pdf文件 1.pom依赖 <!--freemar ...
最新文章
- Oracle Mutex 机制 说明
- 关于CSS中的相对路径和绝对路径
- HDU 2066 一个人的旅行
- 给程序员的10条建议,吐血推荐!
- java 反射与封装性的_Java反射的封装
- mysql gridview_DateGridView控件与mysql交互
- 打飞机小游戏,附带源码
- python学习——python平台搭建
- 抖音短视频怎么加文字 怎么在视频画面批量添加一行滚动字幕?
- android 弹幕 计算碰撞轨道,GitHub - imtaotao/danmuku: 高度自定义弹幕样式,碰撞检测,你值得拥有 ...
- js:nodejs搭建http服务器为页面添加mysql中的数据分页
- 怎么打开ofd文件的三种方法
- 基于蜜蜂算法的函数寻优及TSP搜索算法
- ios view改变重叠层次关系
- 定风波·南海归赠王定国侍人寓娘
- 按键脚本c语言,按键精灵脚本(示例代码)
- PMP到底是啥,你竟然还不知道?
- 计算机常用英语单词[转]
- 基于 STM32+FPGA 的多轴运动控制器的设计
- c语言实现迪克斯特拉算法
热门文章
- 【Excel】偷懒小技巧2:快速为非空单元格编号
- 微信公众号,图文编辑超链接中,没有外部链接只能增加公众号链接是什么情况?
- MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用
- 二叉树的类型定义与基本操作
- 研究生学习生活日记——第十三次组会
- puml绘制思维导图_盘点那些美美哒的在线思维导图制作神器
- 在线制作流程图、思维导图(基于ProcessOn平台)
- GNU 软件文档下载
- Uipath鼠标单击扩展教程
- 计算机关机键 自动重启,电脑关机会重启如何处理_电脑关机立马自动启动的修复方法...