
mpdf 默认会缩放表格字体以强制整行留在单页,导致长文本显示过小;本文介绍通过避免表格布局、改用块级元素或手动拆分内容等方式,确保长文本按自然段落跨页且保持原始字号。
mpdf 默认会缩放表格字体以强制整行留在单页,导致长文本显示过小;本文介绍通过避免表格布局、改用块级元素或手动拆分内容等方式,确保长文本按自然段落跨页且保持原始字号。
在使用 mPDF 生成 PDF 时,若将大段文本置于
的 | 中,常遇到一个典型问题:mPDF 为保证 |
完整显示在一页内,会自动缩小字体(即使设置了 shrink_tables_to_fit = 1),而非将长文本自然换行并跨页延续——这是其官方文档明确声明的行为:“mPDF will always resize tables if it is the only way to fit a row or whole table onto a full page”。✅ 推荐解决方案:弃用表格布局,改用语义化块级结构
对于以展示为主(非严格行列对齐)的场景,应优先使用
+ CSS 布局替代
。例如:<style>
.row { display: flex; margin-bottom: 8px; }
.label { width: 120px; font-weight: bold; }
.content { flex: 1; }
</style><div class="row">
<div class="label">Small text</div>
<div class="content">
This is a very long paragraph that contains multiple sentences and should wrap naturally across pages without shrinking the font. mPDF handles block-level elements correctly — it breaks content at page boundaries while preserving font size and line height.
</div>
</div>
<div class="row">
<div class="label">Another label</div>
<div class="content">
More lengthy content here… continues seamlessly on next page when needed.
</div>
</div>
⚠️ 注意事项:
- 禁用 shrink_tables_to_fit = 1(默认即为 1),若仍需保留表格,请确保每行
内容高度可控,并手动在长文本中插入 或使用 注释强制分页;- 避免给
设置固定高度或 overflow: hidden,这会干扰 mPDF 的分页计算;- 如必须用表格(如报表类场景),可预处理长文本:按字符数或句子边界切分为多行
,例如 PHP 中用 wordwrap($text, 80, '
| ', true) 辅助拆分。 ? 总结:mPDF 的表格分页机制以“行完整性”为优先,不支持
|
内容跨页流式布局。真正可靠的跨页方案是脱离表格,采用 Flex/Grid 布局或纯段落结构——既符合语义化原则,又完全兼容 mPDF 的分页引擎。 |
|