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

关于使用php的mpdf插件遇到的一些问题

一.插件版本

"mpdf/mpdf": "^8.0",

二.报错:Undefined index: list_style_type

这个是插件无法识别 li 标签导致,生成pdf是加入下面代码

<style> li { list-style-type: none; list-style-image: none; list-style-position: unset; } </style>

三.图片请求一直没有响应,导致卡死,生成不了pdf

一般是图片地址本身就连接不了,或者图片重定向或者404都有可能有问题

1.问题代码(插件里面fopen和file_get_contents方法没有加超时时间):

插件代码路径:vendor\mpdf\mpdf\src\Image\ImageProcessor.php

前面获取不到文件信息,后面就用curl请求

2.加入超时时间代码

//对fopen和file_get_contents方法游戏,单位:秒
ini_set('default_socket_timeout', 5);
// 对后面的curl请求有效
$mpdf->curlTimeout                  = 5;
$mpdf->curlExecutionTimeout         = 7;

四.插件识别不了svg,如果html有svg可以转成png,然后替换dom(可以用jquery的方法replaceWith替换dom)

前端js svg转png方法

https://blog.csdn.net/qq_39634880/article/details/140546066?spm=1001.2014.3001.5501

五.样式上,插件识别不了display:flex样式和iconfont之类

iconfont如果不多可以转成图片

六.完整代码

$html = '<div>测试</div>';
/** 关于设置的default_socket_timeout,curlExecutionTimeout,curlTimeout请求超时时间* 本地测试了一下,如果文档中存在相同的图片链接,如果第一次都超时了,第二次不会再请求了,默认是失败** 例如:*  <img src='127.0.0.1:8080/test.png'/> 这个第一次请求超时,会真正的去请求*  <img src='127.0.0.1:8080/test.png'/> 这个默认是失败了** 定义输出流超时时间 - 主要针对插件里面的fopen和file_get_contents方法,这两个方法访问图片url地址,如果地址一直没有响应(图片url重定向也有可能导致一直获取不到图片,导致卡死,比如http重定向到https),这个两个方法就一直卡着* 图片获取文件路径 :vendor\mpdf\mpdf\src\Image\ImageProcessor.php* 不过获取不到最后会用curl_setopt去请求的,curlTimeout,curlExecutionTimeout这个两个参数是对应超时时间* 这边设置超时时间,避免一直卡着,导致生成pdf失败** 单位:秒*/
ini_set('default_socket_timeout', 5);$mpdf = new Mpdf(['mode'             => 'utf-8','tempDir'          => 'c:/GCloud_Document/pdf/','useSubstitutions' => true,'backupSubsFont'   => ['dejavusanscondensed', 'arialunicodems', 'sun-exta'],
]);$mpdf->SetFooter('{PAGENO} / {nbpg}');
// pdf里面的title名称
$mpdf->SetTitle('测试');$mpdf->allow_charset_conversion = true;
$mpdf->useAdobeCJK              = true;
$mpdf->autoLangToFont           = true;
$mpdf->autoScriptToLang         = true;
//存在一张图片加载不了就接口报错,这边注释掉
// $mpdf->showImageErrors = true;/** curlTimeout是设置连接对方主机时的最长等待时间* curlExecutionTimeout整个cURL函数执行过程的最长等待时间* 设置这两个主要是请求图片相关,有些图片访问不了,不设置,就一直卡着* 这边试了下,最终以curlExecutionTimeout这个时间** 单位:秒*/
$mpdf->curlTimeout                  = 5;
$mpdf->curlExecutionTimeout         = 7;$mpdf->biDirectional = true;//样式,自己写个路径
$header = "<link href='./pdf.css' rel='stylesheet'>";
/** vendor//mpdf//mpdf//src//Tag//BlockTag.php 900行报错:Undefined index: list_style_type* 加以下样式就不报错,虽然不报错了,但是样式上不好看*/
$header.='<style> li { list-style-type: none; list-style-image: none; list-style-position: unset; } </style>';
$mpdf->WriteHTML($header);$html = "<div>{$html}</div>";$mpdf->Bookmark('测试', 0);
try {$mpdf->WriteHTML($html);
} catch (\Exception $ex) {var_dump('生成pdf失败:');var_dump($ex->getMessage());return;
}//D是下载
$mpdf->Output('test.pdf', 'D');

六.生成pdf慢就是图片影响,其他基本上不影响,如果没有图片基本上几秒搞定

http://www.lryc.cn/news/413151.html

相关文章:

  • 电脑截图,颜色变淡的问题解决
  • uniApp跳转外链
  • 科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”
  • SpringSecurity+Mysql数据库实现用户安全登录认证
  • 虚拟网卡添加ip
  • Unity向量线性插值Lerp
  • fatal: Could not read from remote repository. 解决方法
  • postman查询单条数据Get方法,无任何输出,idea后端也没有任何数据和提示的解决方法
  • query怎么改写,才能实现高质量的知识问答系统
  • Python实战——轻松实现动态网页爬虫(附详细源码)
  • Python应用—利用opencv实现图像匹配
  • Excel函数基础(二)
  • 学习大数据DAY30 python基础语法3
  • 一文弄清Java的四大引用及其两大传递
  • arduino程序-MC猜数字5、6(基础知识)
  • 【笔记】如何在ps里调整贴图
  • 【C++11】深度解析--异步操作(什么是异步?异步有那些操作?异步操作有什么用呢?)
  • PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
  • LDR6020 iPad皮套一体式键盘充电方案解析
  • 一款功能强大且免费的跨平台图片批量处理工具
  • 用Python打造精彩动画与视频,4.2 特效和滤镜的使用
  • 在 iOS 系统中,如何设置才能更好地保护个人隐私?
  • Charles抓包工具系列文章(七)-- Rewrite工具的应用示例
  • 国内SSL证书颁发机构哪家服务更优质?
  • 鸿蒙系统开发【设备安全服务-应用设备状态检测】安全
  • 19个运维工程师面试集锦
  • 一芯解锁「看家」新体验,航芯高性价比猫眼智能锁方案,让安全看得见!
  • IPv4 vs IPv6:了解这两大协议的关键差异
  • C#知识|XML文件操作
  • TCP 和 UDP 之间的区别?