理想的解决方案是page-break-before: avoid
在页脚上使用。这只会在您的场景下提供最小的覆盖范围(即只会拉出一个表格行),但至少页脚不会是单独的。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
div { width: 100%; margin: .25em; }
span { width: 33%; display: inline-block; }
div#footer { text-align: right; border-top: 1px solid black; page-break-before: avoid; }
</style>
</head>
<body>
<div><span>Count</span><span>Item</span><span>Item Total</span></div>
<div><span>1</span><span>widget</span><span>X.XX</span></div>
<div><span>1</span><span>widget</span><span>X.XX</span></div>
...
<div><span>1</span><span>widget</span><span>X.XX</span></div>
<div><span>1</span><span>widget</span><span>X.XX</span></div>
<div id="footer">
<p>Total: X.XX</p>
</div>
</body>
</html>
不幸的是,page-break-before 在表格上效果不佳。为了在这种情况下提供解决方法,我将从一个假设开始:页脚可以位于页面的最底部,无论内容位于多远。
在这种情况下,您基本上可以解决这个问题,因为 dompdf 处理文档内容的方式有一个怪癖。即,元素在遇到时被渲染。因此,一个固定位置的元素会呈现在从遇到它的页面开始的页面上。它不会出现在以前的页面上。
这是 v0.6.0 之前的一个怪癖,将来可能会改变。
因此,您可以将页脚放置在文档的末尾,position: fixed
或者position: absolute
使用页边距将页脚移到其中。类似于以下内容:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style>
@page { margin: 1in; }
table { width: 100%; }
div#footer { width: 100%; position: absolute; bottom: -.35in; text-align: right; border-top: 1px solid black; }
</style>
</head>
<body>
<table>
<tr><td>Count</td><td>Item</td><td>Item Total</td></tr>
<tr><td>1</td><td>widget</td><td>X.XX</td></tr>
<tr><td>1</td><td>widget</td><td>X.XX</td></tr>
...
<tr><td>1</td><td>widget</td><td>X.XX</td></tr>
<tr><td>1</td><td>widget</td><td>X.XX</td></tr>
</table>
<div id="footer">
<p>Total: X.XX</p>
</div>
</body>
</html>
使用上面的代码,页脚将始终出现在页面底部的最后一页上。