You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:44:25