我有一个项目,需要打印一个有很多行的HTML表。
我的问题是表格打印多页的方式。它有时会把一行切成两半,使它无法阅读,因为一半在一页的流血边缘,剩下的打印在下一页的顶部。
我能想到的唯一可行的解决方案是使用堆叠的div而不是一个表,并在需要时强制换页。但在经历整个变化之前,我想我可以在这里问一下。
我有一个项目,需要打印一个有很多行的HTML表。
我的问题是表格打印多页的方式。它有时会把一行切成两半,使它无法阅读,因为一半在一页的流血边缘,剩下的打印在下一页的顶部。
我能想到的唯一可行的解决方案是使用堆叠的div而不是一个表,并在需要时强制换页。但在经历整个变化之前,我想我可以在这里问一下。
当前回答
我最终遵循了@vicenteherrera的方法,并进行了一些调整(可能是针对引导程序的)。
基本上;我们不能破坏trs或TDS,因为它们不是块级元素。因此,我们将div嵌入到每个div中,并对div应用我们的分页-*规则。我们在每个div的顶部添加了一些填充,以补偿任何样式构件。
<style>
@media print {
/* avoid cutting tr's in half */
th div, td div {
margin-top:-8px;
padding-top:8px;
page-break-inside:avoid;
}
}
</style>
<script>
$(document).ready(function(){
// Wrap each tr and td's content within a div
// (todo: add logic so we only do this when printing)
$("table tbody th, table tbody td").wrapInner("<div></div>");
})
</script>
边际和填充调整是必要的,以抵消某种类型的抖动,这是引入(我的猜测-从bootstrap)。我不确定我是否提出了这个问题的其他答案的新解决方案,但我想这可能会帮助到一些人。
其他回答
使用这些CSS属性:
page-break-after
page-break-before
例如:
<html>
<head>
<style>
@media print
{
table {page-break-after:always}
}
</style>
</head>
<body>
....
</body>
</html>
via
在Chrome中,没有一个答案对我有用。AAverin在GitHub上创建了一些有用的Javascript,这对我来说很有用:
只需将js添加到您的代码中,并将类'splitForPrint'添加到您的表中,它将整齐地将表分割为多个页面,并将表头添加到每个页面。
我检查了许多解决方案,任何人都不能很好地工作。
所以我尝试了一个小技巧,它起作用了:
脚带风格:位置:固定;底部:0 px; 位于最后一页的底部,但如果页脚太高,则会与表的内容重叠。
只有Tfoot: display: table-footer-group; 没有重叠,但没有在最后一页的底部…
让我们放两个tfoot:
TFOOT。砂矿{ 显示:table-footer-group; 身高:130 px; } TFOOT。内容{ 显示:table-footer-group; 位置:固定; 底部:0 px; 身高:130 px; } < TFOOT类=“砂矿”> < TR > < TD > <!——此处为空 --> 道明> < / < / TR > < / TFOOT > < TFOOT类= >“内容” < TR > < TD > 你的长文字或高图像在这里 道明> < / < / TR > < / TFOOT >
一是在非最后一页保留位置,二是放在你的固定页脚。
接受的答案在所有浏览器中都不适用,但以下css确实适用于我:
tr
{
display: table-row-group;
page-break-inside:avoid;
page-break-after:auto;
}
html的结构是:
<table>
<thead>
<tr></tr>
</thead>
<tbody>
<tr></tr>
<tr></tr>
...
</tbody>
</table>
在我的例子中,有一些附加的问题与头tr,但这解决了原来的问题,保持表行中断。
由于标题的问题,我最终以:
#theTable td *
{
page-break-inside:avoid;
}
这并没有阻止行断裂;只是每个单元格的内容。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test</title>
<style type="text/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 }
</style>
</head>
<body>
<table>
<thead>
<tr><th>heading</th></tr>
</thead>
<tfoot>
<tr><td>notes</td></tr>
</tfoot>
<tbody>
<tr>
<td>x</td>
</tr>
<tr>
<td>x</td>
</tr>
<!-- 500 more rows -->
<tr>
<td>x</td>
</tr>
</tbody>
</table>
</body>
</html>