window.print()打印自动分页示例

window.print()打印自动分页示例

说明

关于window.print()打印自动分页的示例记录


效果图

print1


print2

说明

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

图示

图示

说明:
通过图示我们可以得出几个关键信息
**头部信息固定占4行,尾部信息固定占6行,每页最大固定占32行。
我们将一页,两页,多页的情况写下来,不难发现首页最大内容数为28行,当内容小于28行时是一种情况,当大于28条是另外一个规律性的情况。
所以得出了以下分析**

  1. 当总数小于28行时

    1.底部内容占6行,当内容总数小于22行时,底部内容不需要换页,一页就可以打印全部内容。
    2.当内容总数大于22行小于28行时,底部内容6行+内容行数超出整页的行数,底部内容分页总共两页
    
  2. 当总数大于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;">
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          </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>

打印示例二

图示

打印1
打印2

后台代码

$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']; ?>&nbsp;
            </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']; ?>&nbsp;
            </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']; ?>&nbsp;
            </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']; ?>&nbsp;
            </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']; ?>&nbsp;
            </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']; ?>&nbsp;
                </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']; ?>&nbsp;
                </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']; ?>&nbsp;
                </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']; ?>&nbsp;
                </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']; ?>&nbsp;
                </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>

结尾

腹有诗书气自华,最是书香能致远。

添加新评论