
当 mpdf 渲染含复杂 rowspan 的嵌套表格时,会强制缩小字体以适配单元格高度,而非自然分页;本文提供禁用自动缩放、启用智能分页与结构优化的完整解决方案。
当 mpdf 渲染含复杂 rowspan 的嵌套表格时,会强制缩小字体以适配单元格高度,而非自然分页;本文提供禁用自动缩放、启用智能分页与结构优化的完整解决方案。
mPDF 默认对表格采用“收缩适配”策略(shrink_tables_to_fit),尤其在遇到跨多行的
✅ 正确配置:关闭收缩 + 启用分页控制
首先,必须彻底禁用自动缩放,并配合分页提示:
$mpdf = new \Mpdf\Mpdf([
'shrink_tables_to_fit' => 0, // 关键:禁用字体收缩(默认为 1)
'autoScriptToLang' => true,
'autoLangToFont' => true,
'use_kwt' => true,
]);
⚠️ 注意:shrink_tables_to_fit => 1 是问题根源,设为 0 才能交由 CSS 和分页逻辑接管。
✅ HTML/CSS 层:强制分页与结构规范
在 HTML 中,需主动引导分页,并规避嵌套陷阱:
<!-- ✅ 推荐:扁平化结构,避免 table 套 table -->
|
长文本内容...
|
常规列内容 |
| 第2行 | |
| 第3行 | |
| 第4行 | |
| 第5行 |
✅ 进阶技巧:动态检测 & 强制分页
若 rowspan 内容高度不可控,可在生成前估算并插入分页符:
// PHP 侧简易高度预判(基于行数/字符数启发式)
$content = "大量文本...";
if (mb_strlen($content) > 800 || substr_count($content, "\n") > 15) {
$html .= '<div style="page-break-before: always;"></div>';
}
$html .= '<td rowspan="10">' . htmlspecialchars($content) . '</td>';
? 总结要点
- 根本原因:shrink_tables_to_fit = 1 + 嵌套表格 → mPDF 高度计算失效 → 字体被暴力压缩;
- 核心修复:shrink_tables_to_fit => 0 + page-break-inside: avoid + 拆除嵌套结构;
-
最佳实践:用语义化 替代内层
,配合 CSS 控制布局与分页;
- 调试建议:开启 mPDF debug 模式('debug' => true)查看日志中 Table height overflow 提示,定位具体单元格。
遵循以上方案,即可让 rowspan 表格内容自然分页,彻底告别字体“隐身”问题。










