关于使用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慢就是图片影响,其他基本上不影响,如果没有图片基本上几秒搞定
相关文章:
关于使用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-positi…...
电脑截图,颜色变淡的问题解决
解决 Windows 11 在 HDR 模式下截图 Edge 浏览器界面时画面过曝的问题-腾讯云开发者社区-腾讯云 (tencent.com) 主要是浏览器用错了东西,调一下就好,详情看链接 联想拯救者y9000p为例,选择sRGB,就好啦,拜拜喽&#x…...
uniApp跳转外链
创建一个新的页面,在该页面中使用web-view组件加载外部URL:pages/web-view/web-view <template><view><uni-list><uni-list-itemtitle"打开外部链接"click"openExternalLink"></uni-list-item></…...
科技云报道:大模型引领技术浪潮,AI安全治理面临“大考”
科技云报道原创。 从文生文到文生图,再到文生视频,近年来,以ChatGPT、Sora等为代表的大模型引领了全球人工智能技术与产业的新一轮浪潮。2024年更是被业内称为大模型应用爆发元年。 年初,Sora横空出世验证了Scalling Law在视频生…...
SpringSecurity+Mysql数据库实现用户安全登录认证
Spring Security 是一个提供身份认证、授权和防范常见攻击的安全权限框架。无论是对命令式,还是响应式web应用程序都完美支持,现在主要用作保护基于 Spring 框架的应用程序的事实标准。相对于shiro来说,SpringSecurity功能更加复杂而且更加强…...
虚拟网卡添加ip
1.虚拟机网卡添加 1.进入虚拟机设置添加网卡即网络适配器 2.配置文件修改 1.查看网卡是否添加成功 ip ad ifconfig 其中ens161就是我们新添加的设备同时这个ens161也是我们硬件名字 2.进入系统配置文件 cd /etc/sysconfig/network-scripts/#配置文件目录[rootlocalhost ne…...
Unity向量线性插值Lerp
inline glm::vec3 Lerp(glm::vec3 start, glm::vec3 end, float t){t glm::clamp(t, 0.0f, 1.0f);return (start*(1-t)end*t); }...
fatal: Could not read from remote repository. 解决方法
问题描述: Git : fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists。 解决方法: 当在网上尝试大量方法仍然失败的时候,不妨试试这个方法。 在 github 上&…...
postman查询单条数据Get方法,无任何输出,idea后端也没有任何数据和提示的解决方法
问题描述: 正常使用postman测试,输入内容没有错误,但是却没有任何消息 后端也是,没有任何消息: 解决方法: 问题的原因主要是因为postman: 我们只需要新建一个页面,把刚才的查询语…...
query怎么改写,才能实现高质量的知识问答系统
为了实现高质量的知识问答系统,query改写需要综合利用多种技术,确保改写后的查询更具语义性、准确性和完整性。以下是具体的步骤和方法: 1. 同义词和短语替换 步骤: 建立同义词库:使用现有的同义词词典或根据特定领…...
Python实战——轻松实现动态网页爬虫(附详细源码)
大家好,我是东眠的鱼,专注原创,致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货,希望人人都能学到新知识。<文末附带精品籽料哦,也可以和博主一起学Python呀!> 项目背景 有同学自学爬虫时…...
Python应用—利用opencv实现图像匹配
1.创作需求 我们通常需要从一幅图中找到自己想要的信息,例如从一堆表情中找到,自己需要的表情。 2.创作思路 1.使用模板图片作为卷积核与原图进行卷积运算,得出匹配度超过某一阈值的范围。 2.对该部分进行框选 3.工具 主要使用opencv库实现,通过 cv2.matchTemplate(…...
Excel函数基础(二)
1、单元格名称 框选单元格(不含标题),公式选项卡->定义名称, 或者框选单元格后,在左上角的栏位直接输入要定义的名字,按下enter键即可 这样在使用函数时,数据范围参数可以用定义的名称来替…...
学习大数据DAY30 python基础语法3
目录 上机练习 5 File(文件) 读写 文本文件写 文本文件读 csv 文件写 csv 文件读 异常 自定义异常 上机练习 6 上机练习 5 上机练习5的作业我昨天就写完了,但是因为它是今天的作业,我就今天发咯。 # atm 机模拟器:使用 main 入口&…...
一文弄清Java的四大引用及其两大传递
开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…...
arduino程序-MC猜数字5、6(基础知识)
arduino程序-MC猜数字5、6(基础知识) 1-23 MC猜数字-5 自定义函数自定义函数自定义清理显示内容函数displayClear()带参数函数displayNumber带参数、返回值的函数 1-24 MC猜数字-6 完成制作显示0~9数字函数改造产生随机数字函数改…...
【笔记】如何在ps里调整贴图
如图我想要在ps里把角上半部分画成绿色 1.打开ps,拖进贴图 2.把所有图层全选复制,除了实体、选择、背景和uv图层 3.把这些图层合并 4.自己手动选上半部分角 按shift加选 alt减选 5. 这里可以调整饱和度、色相、明度 6. 选好之后用羽化之后边缘会…...
【C++11】深度解析--异步操作(什么是异步?异步有那些操作?异步操作有什么用呢?)
目录 一、前言 二、什么是异步操作呢? 🔥异步的概念🔥 🔥异步的生活案例说明🔥 三、异步有那些操作呢? 🔥std::future🔥 💢std::future 的概念💢 &a…...
PHP苹果 V X iPhone微商i o s多分开V X语音转发密友朋友圈一键跟圈软件
苹果VX神器!iPhone微商必备:ios多开、VX语音转发、密友朋友圈一键跟圈软件大揭秘! 一、iOS多开新境界,工作生活两不误! 你是不是也烦恼过,想要在工作号和生活号之间自由切换,却因为iPhone的限制…...
LDR6020 iPad皮套一体式键盘充电方案解析
在移动办公与学习的浪潮中,iPad凭借其强大的性能与便携性,成为了越来越多人的首选设备。然而,随着工作与学习任务的日益复杂,单一的触控操作已难以满足高效、精准的需求。因此,搭配一款优秀的键盘成为了提升iPad使用体…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
