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.
相关产品推荐
相关产品推荐

