当须要打印的内容过长时零碎会产生主动宰割页面,造成款式不太好看。应用 CSS 的 @media print
联合 <table>
能够实现对分页款式的可控。成果如下:
假如有 50 条数据,打印时零碎会主动分成两页,同时每页保留自定义的 header 和 footer。
代码如下:
<html>
<head>
<title>print</title>
<style>
/* 在打印时利用此规定 */
@media print {
@page {
/* 文档的页面大小 */
size: A4;
/* 文档的页边距 */
margin: 10mm 20mm 20mm;
}
table {
width: 100%;
border-collapse: collapse;
}
tbody tr td {
padding-left: 5px;
border: 1px solid #000;
word-break: keep-all;
font-size: .9rem;
}
.header-row th {border: 1px solid #000;}
.title {
margin: 0 0 20px;
font-size: 1.5rem;
}
.footer-row {padding-top: 10px;}
}
</style>
</head>
<body>
<table>
<thead>
<tr>
<th colspan="3">
<div class="title"> 题目 1 题目 1 </div>
</th>
</tr>
<tr class="header-row">
<th>First Name</th>
<th>Last Name</th>
<th>age</th>
</tr>
</thead>
<tbody id="tbody"></tbody>
<tfoot>
<tr>
<td colspan="1" class="footer-row">
<div> 打印人:小王 </div>
</td>
<td colspan="2" class="footer-row">
<div class="footer-time"> 打印工夫:2000-01-01 00:00:00</div>
</td>
</tr>
</tfoot>
</table>
<script>
// mock
const rowNum = 50;
const fragment = document.createDocumentFragment();
for (let i = 0; i < rowNum; i++) {const _tr = document.createElement('tr');
const _td1 = document.createElement('td');
const _td2 = document.createElement('td');
const _td3 = document.createElement('td');
_td1.appendChild(document.createTextNode(`John${i}`));
_td2.appendChild(document.createTextNode(`Doe${i}`));
_td3.appendChild(document.createTextNode(`${i}`));
_tr.appendChild(_td1);
_tr.appendChild(_td2);
_tr.appendChild(_td3);
fragment.appendChild(_tr);
}
document.querySelector('#tbody').appendChild(fragment);
</script>
</body>
</html>
ctrl+p
/ command+p
唤起打印即可查看成果
注:不能应用 @page
规定批改所有的 css 属性,只能批改文档的 margin、orphans、windows 和分页符,对其余属性的批改有效。@page