Laravel使用mPDF生成PDF报错:Call to undefined function Mpdf\Mpdf()求解决
解决Laravel中使用mPDF时出现"Call to undefined function Mpdf\Mpdf()"的问题
嘿,这个错误我之前在项目里也踩过坑!问题主要出在mPDF的实例化方式上,还有几个小细节需要调整,我来一步步帮你搞定:
1. 核心错误:错误的实例化方式
mPDF 8.x是面向对象的类,不是全局可调用的函数。你现在直接写\Mpdf\Mpdf()是把它当成函数调用了,这肯定会报错。正确的做法是用new关键字创建类实例:
// 错误写法 $mpdf = \Mpdf\Mpdf(); // 正确写法 $mpdf = new \Mpdf\Mpdf();
2. 修复HTML中的变量解析问题
你当前的HTML字符串用了单引号,里面的$post->title不会被解析成实际的标题内容,只会输出字面量。可以改成两种写法:
// 方式一:用双引号包裹,变量用大括号包裹(推荐) $html = "<h1>{$post->title}</h1>"; // 方式二:字符串拼接 $html = '<h1>' . $post->title . '</h1>';
3. 确保Composer自动加载生效
虽然你已经通过Composer引入了mPDF,但有时候自动加载缓存会导致类无法被找到。执行下面的命令刷新缓存:
composer dump-autoload
4. 可选:用命名空间导入简化代码
在控制器的顶部导入mPDF的命名空间,这样后面的代码就不用写完整的命名空间路径了,看起来更清爽:
// 在控制器顶部添加 use Mpdf\Mpdf; // 后面实例化时直接写 $mpdf = new Mpdf();
修改后的完整代码示例
use Mpdf\Mpdf; use Illuminate\Http\Request; use App\Models\Post; // 根据你的实际模型命名空间调整 public function show(Request $request, Post $post) { $this->authorize('view', $post); if ($request->input('view') === 'pdf') { $mpdf = new Mpdf(); $html = "<h1>{$post->title}</h1>"; $mpdf->writeHTML($html); // 注意:这里直接return输出,不要和后面的response冲突 return $mpdf->Output('post.pdf', 'D'); } return response($post); }
最后再检查一下:确保你的服务器PHP版本符合mPDF 8.x的要求(需要PHP 7.1及以上,推荐7.4+),并且安装了GD、mbstring等必要的扩展。
内容的提问来源于stack exchange,提问作者nacho
相关产品推荐
相关产品推荐

