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

Mpdf 7.1生成PDF仅显示文本无HTML标签和CSS样式求助

解决Mpdf 7.1生成PDF仅显示文本无样式/表格的问题

针对你在PHP 7.2环境下用Mpdf 7.1生成PDF只显示纯文本的问题,结合你已经尝试的操作,我整理了几个针对性的排查和解决方向:

1. 先确认CSS文件是否被正确加载

共享服务器的路径问题很容易踩坑,你用file_get_contents('libs/css/xxx.css')可能因为相对路径不对导致没读到样式内容,建议改用绝对路径来读取文件:

// 用__DIR__来定位当前脚本所在目录的相对路径,确保文件能被找到
$resetCss = file_get_contents(__DIR__ . '/libs/css/reset.css');
$pdfCss = file_get_contents(__DIR__ . '/libs/css/pdf.css');

// 先打印确认内容是否正确读取,避免空样式
var_dump($resetCss, $pdfCss);

如果输出是false,说明路径错误,调整路径到正确的位置即可。

2. 调整WriteHTML的使用方式

Mpdf的WriteHTML参数对样式解析影响很大,你可以试试两种更稳妥的写法:

写法一:传入完整的规范HTML结构

直接把包含<head>和内嵌样式的完整HTML传入,用默认参数(0)即可:

$fullHtml = '<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <style>' . $resetCss . "\n" . $pdfCss . '</style>
</head>
<body>
    <!-- 这里放你的完整内容,注意表格结构要闭合 -->
    <table style="border-collapse: collapse; width: 100%;">
        <tr>
            <th style="border:1px solid #000; padding: 8px;">表头1</th>
            <th style="border:1px solid #000; padding: 8px;">表头2</th>
        </tr>
        <tr>
            <td style="border:1px solid #000; padding: 8px;">内容1</td>
            <td style="border:1px solid #000; padding: 8px;">内容2</td>
        </tr>
    </table>
</body>
</html>';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML($fullHtml);
$mpdf->Output('test.pdf');

写法二:分开加载样式和内容

如果要分开传样式和内容,确保参数对应正确:

$mpdf = new \Mpdf\Mpdf();
// 参数1:仅加载CSS样式
$mpdf->WriteHTML($resetCss . "\n" . $pdfCss, 1);
// 参数2:仅加载HTML内容(不含<head>)
$mpdf->WriteHTML($yourBodyContent, 2);
$mpdf->Output('test.pdf');

3. 适配Mpdf的CSS兼容规则

Mpdf 7.x对CSS的支持不是完全和浏览器一致,有些属性会被忽略,比如:

  • 避免使用position: absolute、float(复杂布局可能失效)
  • 表格样式必须明确设置border-collapse: collapse,否则边框可能不显示
  • 尽量用内联样式或者简单的类选择器,避免复杂的CSS选择器(比如子代选择器、伪类)

你可以先写一个极简的测试案例,验证基础样式是否生效:

$testHtml = '<html>
<head>
    <style>
        .title { color: #ff0000; font-size: 20px; }
        table { border-collapse: collapse; }
        td { border:1px solid #333; padding: 5px; }
    </style>
</head>
<body>
    <h1 class="title">测试标题</h1>
    <table>
        <tr><td>测试单元格1</td><td>测试单元格2</td></tr>
    </table>
</body>
</html>';

$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML($testHtml);
$mpdf->Output('test-minimal.pdf');

如果这个案例能正常显示红色标题和带边框的表格,说明问题出在你的原有CSS或HTML结构上,再逐步排查。

4. 调整Mpdf初始化配置

初始化Mpdf时可以指定打印媒体类型,确保样式按打印规则生效:

$mpdf = new \Mpdf\Mpdf([
    'mode' => 'utf-8',
    'cssMedia' => 'print', // 强制使用打印媒体样式
    'format' => 'A4'
]);

内容的提问来源于stack exchange,提问作者Renátó S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:02:04