h3.*_*h3. 255 html css printing html-table
我有一个项目,需要打印一个包含许多行的HTML表.
我的问题是表格在多页上打印的方式.它有时会减少一半,使其无法读取,因为一半位于页面的边缘,其余部分打印在下一页的顶部.
我能想到的唯一合理的解决方案是使用堆叠的DIV而不是表格,并在需要时强制分页.但在完成整个更改之前,我认为我之前可以问过这个问题.
Sin*_*nür 270
<!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>
Run Code Online (Sandbox Code Playgroud)
Jos*_*h P 45
注意:使用page-break-after时:总是对于标记,它会在表的最后一位之后创建一个分页符,每次最后创建一个完全空白的页面!要解决这个问题,只需将其更改为page-break-after:auto即可.它会正确破坏而不会创建额外的空白页面.
<html>
<head>
<style>
@media print
{
table { page-break-after:auto }
tr { page-break-inside:avoid; page-break-after:auto }
td { page-break-inside:avoid; page-break-after:auto }
thead { display:table-header-group }
tfoot { display:table-footer-group }
}
</style>
</head>
<body>
....
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
vic*_*era 21
从SinanÜnür解决方案扩展:
<!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 }
div { page-break-inside:avoid; } /* This is the key */
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>
<tr>
<td><div>Long<br />cell<br />should'nt<br />be<br />cut</div></td>
</tr>
<tr>
<td><div>Long<br />cell<br />should'nt<br />be<br />cut</div></td>
</tr>
<!-- 500 more rows -->
<tr>
<td>x</td>
</tr>
</tbody>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
似乎page-break-inside:avoid在某些浏览器中仅考虑块元素,而不是单元格,表格,行也不考虑内联块.
如果您尝试display:block了TR代码,并使用那里page-break-inside:avoid,它的工作原理,但与你的表格布局弄乱左右.
MDa*_*ave 10
这里没有任何答案适用于Chrome.GitHub上的AAverin已经为此创建了一些有用的Javascript,这对我有用:
只需将js添加到您的代码中,并将类"splitForPrint"添加到您的表中,它将整齐地将表拆分为多个页面,并将表头添加到每个页面.
使用这些CSS属性:
page-break-after
page-break-before
Run Code Online (Sandbox Code Playgroud)
例如:
<html>
<head>
<style>
@media print
{
table {page-break-after:always}
}
</style>
</head>
<body>
....
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
小智 5
我最近用一个很好的解决方案解决了这个问题。
CSS :
.avoidBreak {
border: 2px solid;
page-break-inside:avoid;
}
Run Code Online (Sandbox Code Playgroud)
JS:
function Print(){
$(".tableToPrint td, .tableToPrint th").each(function(){ $(this).css("width", $(this).width() + "px") });
$(".tableToPrint tr").wrap("<div class='avoidBreak'></div>");
window.print();
}
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!