【发布时间】:2023-04-06 18:15:01
【问题描述】:
所以,众所周知,这个很棒的 CSS 属性:
table { page-break-inside:auto }
tr { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
tfoot { display:table-footer-group }
不适用于 Chrome。所以现在出现了解决方法。我有这个表结构(请注意JSP和EL语法)
<table class="table resultTable">
<thead class="repeat">
<tr class="head">
<th>XPTO HEADER</th>
<th>XPTO HEADER</th>
</tr>
</thead>
<tbody>
<c:forEach items="${items}" var="t" varStatus="loop">
<tr>
<td class="money">${t.XPTO}</td>
<td class="money">${t.XPTO2}</td>
</tr>
<c:if test="${(loop.index + 1) % 20 == 0}">
<tr class="break-page">
</tr>
</c:if>
</c:forEach>
</tbody>
</table>
需要注意两点:线程上的“重复”类和20行后带有分页类的空tr。
所以,检查一下这个 CSS:
@media print {
.break-page {
display: block; page-break-before: always;
}
}
并检查这个 JS:
var repeat = $('.repeat tr');
$('.break-page').after(repeat.clone());
太棒了 :) 这正是我想要的。检查第一页的效果:
第二页,你可以看到标题重复,但是,看看这个巨大的空白:
就是这样。你们能帮我摆脱那个巨大的空白吗? 如果有人遇到和我一样的麻烦,我也希望这会有所帮助。
谢谢
【问题讨论】:
-
我假设您在 Google 的打印预览中看到了这一点。右键单击并检查元素并查看是否确定导致问题的原因。我的猜测是,第二个页表(实际上)正是从您的第一个页表中断的地方开始的。
-
是的,凯文,我是。虽然我无法在打印预览中检查元素。我从 chrome 得到的只是:
<embed id="plugin" type="application/x-google-chrome-pdf" src="chrome://print/85/0/print.pdf" stream-url="chrome://print/85/0/print.pdf" headers="">PS:我认为你是对的!
标签: javascript css google-chrome printing page-break