window.print()打印自动分页示例
说明
关于window.print()打印自动分页的示例记录
效果图


说明
要求:
根据数据条数自动判断分页,头部标题只有第一页显示,表格的表头有数据的每一页都要显示,顶部内容最后一页显示。
要点:
当数据只有一页时,要判断底部内容是否要放到第二页。当数据有多页时,判断最后一页底部内容是否要放到后一页。
图示

说明:
通过图示我们可以得出几个关键信息
**头部信息固定占4行,尾部信息固定占6行,每页最大固定占32行。
我们将一页,两页,多页的情况写下来,不难发现首页最大内容数为28行,当内容小于28行时是一种情况,当大于28条是另外一个规律性的情况。
所以得出了以下分析**
当总数小于28行时
1.底部内容占6行,当内容总数小于22行时,底部内容不需要换页,一页就可以打印全部内容。 2.当内容总数大于22行小于28行时,底部内容6行+内容行数超出整页的行数,底部内容分页总共两页当总数大于28行时
1.首页内容占28行。 2.中间页数=(总数-28)/32 3.当最后一页的行数(总数-28)%32 小于26行时,最后一页可以放下底部内容,不需要换页 4.当最后一页的行数(总数-28)%32 小于26行时,最后一页可以放下底部内容,需要换页
后台方法书写
$nums=count($data);//数据总条数
$pages=0; //大于28行时中间总页数
$sign=0; //最后一页是否换页
if($nums>28){
$pages+=ceil(($nums-28)/32); //得到中心总页数
$remainder=($nums-28)%32; //得到最后一页的条数
if($remainder>26){ //最后一页大于26条时进行换页
$sign=1; //换页标志
}
}else{
if($nums>22){
$sign=1;
}
}
关键点
页面加载完成时打印
window.onload=function(){
window.print();
}
主动换页标志
注:如果分页代码前有浮动元素的话,主动分页会失效,所以我们尽可能的做一下清除浮动
<div style="clear: both;"></div>
<div style="page-break-after: always;"></div>
前台代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style type="text/css">
.head{
font-size: 30px;
}
.content{
width:100%;
border-collapse:collapse;
padding:10px;
font-size: 10px;
}
</style>
<body>
<div style="width:100%;margin-top:10px;">
<div style="width: 100%;text-align: center;">
<span class="head"><b>全部城乡居民贫困人口门诊病人补偿登记汇总表</b></span><br>
</div>
<div style="margin-top: 15px;width: 100%;float: left;">
<div style="float:left;width: 33%;" >
定点医疗机构:<span> 测试医院 </span>
</div>
<div style="float:left;width: 33%;text-align: center;">
统计日期:<span> 2019-02-01 —— 2019-02-28</span>
</div>
<div style="float:left;width: 33%;text-align: right;">
单位:(元)
</div>
</div>
<table border="1" class="content" align="center">
<tr>
<td style="width: 3%">序号</td>
<td style="width: 5%">姓名</td>
<td style="width: 3%">性别</td>
<td style="width: 3%">年龄</td>
<td style="width: 5%">个人编号</td>
<td style="width: 7%">身份证号</td>
<td style="width: 10%">单位名称</td>
<td style="width: 9%">所患疾病</td>
<td style="width: 10%">医疗类别</td>
<td style="width: 4%">医疗费用总额</td>
<td style="width: 4%">医保补偿</td>
<td style="width: 6%">大病保险补偿金额</td>
<td style="width: 4%">民政救助</td>
<td style="width: 4%">财政兜底</td>
<td style="width: 4%">医院承担</td>
<td style="width: 4%">180补偿</td>
<td style="width: 4%">个人自负</td>
<td style="width: 8%">补偿日期</td>
</tr>
<?php if($nums<28){ ?>
<?php foreach ($date as $key => $value) {?>
<tr>
<td><?php echo $key+1?></td>
<td><?php echo $value['xm']?></td>
<td><?php echo $value['xb']?></td>
<td><?php echo $value['nl']?></td>
<td><?php echo $value['grbh']?></td>
<td><?php echo $value['sfzh']?></td>
<td><?php echo $value['dwmc']?></td>
<td><?php echo $value['ryjb']?></td>
<td><?php echo $value['yllb']?></td>
<td><?php echo $value['ylzfy']?></td>
<td><?php echo $value['tczc']?></td>
<td><?php echo $value['mzjzzc']?></td>
<td><?php echo $value['dbbxzc']?></td>
<td><?php echo $value['czddzc']?></td>
<td><?php echo $value['abzyycd']?></td>
<td><?php echo $value['bcbxzc']?></td>
<td><?php echo $value['grxjzf']?></td>
<td><?php echo $value['time']?></td>
</tr>
<?php }?>
</table>
<?php }else{?>
<?php for ($i=0; $i <28 ; $i++) { ?>
<tr>
<td><?php echo $i+1?></td>
<td><?php echo $date[$i]['xm']?></td>
<td><?php echo $date[$i]['xb']?></td>
<td><?php echo $date[$i]['nl']?></td>
<td><?php echo $date[$i]['grbh']?></td>
<td><?php echo $date[$i]['sfzh']?></td>
<td><?php echo $date[$i]['dwmc']?></td>
<td><?php echo $date[$i]['ryjb']?></td>
<td><?php echo $date[$i]['yllb']?></td>
<td><?php echo $date[$i]['ylzfy']?></td>
<td><?php echo $date[$i]['tczc']?></td>
<td><?php echo $date[$i]['mzjzzc']?></td>
<td><?php echo $date[$i]['dbbxzc']?></td>
<td><?php echo $date[$i]['czddzc']?></td>
<td><?php echo $date[$i]['abzyycd']?></td>
<td><?php echo $date[$i]['bcbxzc']?></td>
<td><?php echo $date[$i]['grxjzf']?></td>
<td><?php echo $date[$i]['time']?></td>
</tr>
<?php } ?>
</table>
<?php if($pages){?>
<?php for ($j=1; $j <= $pages ; $j++) { ?>
<div style="page-break-after: always;"></div>
<table border="1" class="content" align="center">
<tr>
<td style="width: 3%">序号</td>
<td style="width: 5%">姓名</td>
<td style="width: 3%">性别</td>
<td style="width: 3%">年龄</td>
<td style="width: 5%">个人编号</td>
<td style="width: 7%">身份证号</td>
<td style="width: 10%">单位名称</td>
<td style="width: 9%">所患疾病</td>
<td style="width: 10%">医疗类别</td>
<td style="width: 4%">医疗费用总额</td>
<td style="width: 4%">医保补偿</td>
<td style="width: 6%">大病保险补偿金额</td>
<td style="width: 4%">民政救助</td>
<td style="width: 4%">财政兜底</td>
<td style="width: 4%">医院承担</td>
<td style="width: 4%">180补偿</td>
<td style="width: 4%">个人自负</td>
<td style="width: 8%">补偿日期</td>
</tr>
<?php $start=28+($j-1)*32;
$end=28+$j*32;
for ($k=$start; $k < $end; $k++) {
if(!$date[$k]){continue;}
?>
<tr>
<td><?php echo $k+1?></td>
<td><?php echo $date[$k]['xm']?></td>
<td><?php echo $date[$k]['xb']?></td>
<td><?php echo $date[$k]['nl']?></td>
<td><?php echo $date[$k]['grbh']?></td>
<td><?php echo $date[$k]['sfzh']?></td>
<td><?php echo $date[$k]['dwmc']?></td>
<td><?php echo $date[$k]['ryjb']?></td>
<td><?php echo $date[$k]['yllb']?></td>
<td><?php echo $date[$k]['ylzfy']?></td>
<td><?php echo $date[$k]['tczc']?></td>
<td><?php echo $date[$k]['mzjzzc']?></td>
<td><?php echo $date[$k]['dbbxzc']?></td>
<td><?php echo $date[$k]['czddzc']?></td>
<td><?php echo $date[$i]['abzyycd']?></td>
<td><?php echo $date[$k]['bcbxzc']?></td>
<td><?php echo $date[$k]['grxjzf']?></td>
<td><?php echo $date[$k]['time']?></td>
</tr>
<?php } ?>
</table>
<?php } ?>
<?php } ?>
<?php } ?>
<?php if($sign==1) {?>
<div style="page-break-after: always;"></div>
<?php } ?>
<div style="margin-top: 15px;width: 100%;float: left;">
<div style="float:right;margin-right: 200px;">
填表日期:
<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
</span>
</div>
</div>
<div style="margin-top: 15px;width: 100%;float: left;">
<div style="float:left;width: 25%;" >
专职审核员:
</div>
<div style="float:left;width: 25%;">
手机:
</div>
<div style="float:left;width: 25%;">
院长签名(盖章):
</div>
<div style="float:left;width: 25%;">
手机:
</div>
</div>
<div style="margin-top: 15px;width: 100%;float: left;">
<div style="float:left;width: 25%;" >
医疗初审签名:
</div>
<div style="float:left;width: 25%;">
医疗复审签名:
</div>
<div style="float:left;width: 25%;">
财务复核签名:
</div>
<div style="float:left;width: 25%;">
负责人签名:
</div>
</div>
</div>
</body>
<script type="text/javascript">
window.onload=function(){
window.print();
}
</script>
</html>
打印示例二
图示


后台代码
$nums=count($data);//数据总条数
$pages=1; //大于28行时中间总页数
$sign=0; //最后一页是否换页
if($nums>26){
$pages+=ceil(($nums-26)/26); //得到中心总页数
$remainder=($nums-26)%26; //得到最后一页的条数
if($remainder>24){ //最后一页大于26条时进行换页
$sign=1; //换页标志
}
}else{
if($nums>24){
$sign=1;
}
}
前台代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style type="text/css">
.hospital_name{
font-size: 20px;
}
.head{
font-size: 25px;
}
</style>
<body>
<div style="width:100%;margin-top:20px;margin: 0 auto; ">
<!-- 判断一页是否能放下 -->
<?php if($nums<27): ?>
<div style="text-align: center;width: 100%;float: left;">
<span class="hospital_name"><b><?php echo $patienInfo['hospital_name']; ?></b></span><br>
<span class="head"><b>临时医嘱单</b></span><br>
<div style="float:left;margin-left: 15px;">
姓名:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['patient_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
性别:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['gender_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
年龄:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['age']; ?>
</span>岁
</div>
<div style="float:left;margin-left: 10px;">
病区:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['hospital_dept_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
床号:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['h_b_virtual_name']; ?>
</span>
</div>
</div>
<table border="1" style="width:100%;margin-top: 10px;border-collapse:collapse;padding:10px;float: left;border-color: red;" align="center">
<tbody align="center">
<tr>
<td colspan="2">起始</td>
<td rowspan="2">医嘱内容</td>
<td rowspan="2" >医生签字</td>
<td colspan="2" >执行</td>
<td rowspan="2">护士签字</td>
</tr>
<tr>
<td>日期</td>
<td>时间</td>
<td>日期</td>
<td>时间</td>
</tr>
<?php foreach ($doctorAdviceDetail as $key => $value): ?>
<tr style="height: 30px;line-height: 30px;">
<td><?php echo $value['doctor_date']?></td>
<td><?php echo $value['doctor_time']?></td>
<td style="text-align: left;width: 40%;"><?php echo $value['classPrimaryName']?> <?php echo $value['min_dosage']?><?php echo $value['min_dosage_unit_name']?> <?php echo $value['frequency_name']?></td>
<td><?php echo $value['doctor_name']?></td>
<td><?php echo $value['nurse_date']?></td>
<td><?php echo $value['nurse_time']?></td>
<td><?php echo $value['nurse_name']?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif;?>
<!-- 一页可以放下的情况 -->
<!-- 一页放不下的情况 -->
<?php if($nums>26): ?>
<?php for ($i=1; $i <=$pages; $i++) { ?>
<!-- 大于一页时,开头要记得分页 -->
<?php if($i>1): ?>
<div style="page-break-after: always;"></div>
<?php endif; ?>
<!-- 大于一页分页结束 -->
<div style="text-align: center;width: 100%;float: left;">
<span class="hospital_name"><b><?php echo $patienInfo['hospital_name']; ?></b></span><br>
<span class="head"><b>临时医嘱单</b></span><br>
<div style="float:left;margin-left: 15px;">
姓名:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['patient_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
性别:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['gender_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
年龄:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['age']; ?>
</span>岁
</div>
<div style="float:left;margin-left: 10px;">
病区:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['hospital_dept_name']; ?>
</span>
</div>
<div style="float:left;margin-left: 10px;">
床号:<span style="border-bottom: 1px solid #555555;width: 100px;display:inline-block;text-align: center;">
<?php echo $patienInfo['h_b_virtual_name']; ?>
</span>
</div>
</div>
<table border="1" style="width:100%;margin-top: 10px;border-collapse:collapse;padding:10px;float: left;border-color: red;" align="center">
<tbody align="center">
<tr>
<td colspan="2">起始</td>
<td rowspan="2">医嘱内容</td>
<td rowspan="2" >医生签字</td>
<td colspan="2" >执行</td>
<td rowspan="2">护士签字</td>
</tr>
<tr>
<td>日期</td>
<td>时间</td>
<td>日期</td>
<td>时间</td>
</tr>
<?php for ($j=26*($i-1); $j <26*$i; $j++) { ?>
<!-- 计算出最后一条时,结束 -->
<?php if($j==$nums){
break;
}?>
<!-- !!! -->
<tr style="height: 30px;line-height: 30px;">
<td><?php echo $doctorAdviceDetail[$j]['doctor_date']?></td>
<td><?php echo $doctorAdviceDetail[$j]['doctor_time']?></td>
<td style="text-align: left;width: 40%;"><?php echo $doctorAdviceDetail[$j]['classPrimaryName']?> <?php echo $doctorAdviceDetail[$j]['min_dosage']?><?php echo $doctorAdviceDetail[$j]['min_dosage_unit_name']?> <?php echo $doctorAdviceDetail[$j]['frequency_name']?></td>
<td><?php echo $doctorAdviceDetail[$j]['doctor_name']?></td>
<td><?php echo $doctorAdviceDetail[$j]['nurse_date']?></td>
<td><?php echo $doctorAdviceDetail[$j]['nurse_time']?></td>
<td><?php echo $doctorAdviceDetail[$j]['nurse_name']?></td>
</tr>
<?php }?>
</tbody>
</table>
<?php }?>
<?php endif;?>
<!-- 页脚设置开始,有标志分页 -->
<?php if($sign==1):?>
<div style="page-break-after: always;"></div>
<?php endif; ?>
<div style="margin-top: 10px;width: 100%;float: left;">
<div style="float:right;width: 25%;">
医生签名:
</div>
<div style="float:right;width: 25%;">
护士签名:
</div>
</div>
<!-- 页脚设置结束,有标志分页 -->
</div>
</body>
<script type="text/javascript">
window.onload=function(){
window.print();
}
</script>
</html>
结尾
腹有诗书气自华,最是书香能致远。