zoukankan      html  css  js  c++  java
  • 打印知识点总结

    最近在搞打印,分页打印问题困惑较长时间,经过查询资料总结出关于打印相关问题供参考:

    一、小票打印问题:直接用的是佳博的小票打印机,型号:GP-L80160,本机windows10

          直接安装打印机驱动即可打印,对应驱动: GAINSCHA 80mm系列打印机驱动程序V18

    驱动下载地址:https://pan.baidu.com/s/1-tSKXkowJkm8zICcBeovxw

    密码:irdm

    安装过程供参考:

     安装完驱动后在设备和打印机里也可以进行设置:

     

     

    注意:边距选择“无”则打印出来的小票无边距,字体也会较大。如果选择默认,则边距较大且字体较小。以上使用的是谷歌浏览器!!!

    网上找了一个关于打印的html源码:貌似只适用于IE浏览器且IE浏览器要允许使用ActiveX控件,谷歌浏览器点击没有反应。

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>页面打印</title>
    <!--media=print 这个属性在打印时有效 有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的(可从打印预览中看到效果)-->
    <style media=print>
    /* 应用这个样式的在打印时隐藏 */
    .noPrint {
    display: none;
    }

    /* 应用这个样式的,从那个标签结束开始另算一页,之后在遇到再起一页,以此类推 */
    .page {
    page-break-after: always;   ///这个是分页标识
    }
    </style>

    <!-- 这个是普通样式 -->
    <style type="text/css">
    .tab td {
    border-bottom: 1 solid #000000;
    border-left: 1 solid #000000;
    border-right: 0 solid #ffffff;
    border-top: 0 solid #ffffff;
    }

    .tab {
    border-color: #000000 #000000 #000000 #000000;
    border-style: solid;
    border-top- 2px;
    border-right- 2px;
    border-bottom- 1px;
    border-left- 1px;
    }

    .hr {
    font-family: "宋体";
    font-size: 9pt;
    }
    </style>
    <script language="JavaScript" type="text/JavaScript">
    var hkey_root, hkey_path, hkey_key;
    hkey_root = "HKEY_CURRENT_USER";
    hkey_path = "//Software//Microsoft//Internet Explorer//PageSetup//";
    //这个是用来设置打印页眉页脚的,你可以设置为空或者其它
    try{
    var RegWsh = new ActiveXObject("WScript.Shell");
    hkey_key="header";
    RegWsh.RegWrite(hkey_root+hkey_path+hkey_key, "&w&b页码,&p/&P");
    hkey_key="footer";
    RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");
    }catch(e){
    alert(e.description());
    }
    </script>
    </head>
    <body bgcolor="white">
    <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
    <thead class="noPrint">
    <tr>
    <td align="center" colspan="3">
    <center class="NoPrint">
    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0></OBJECT>
    <input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)>
    <input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6) />
    <input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1) />
    <input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1) />
    <!--
    关于这个组件还有其他的用法,列举如下:
    WebBrowser.ExecWB(1,1) 打开
    Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口
    Web.ExecWB(4,1) 保存网页
    Web.ExecWB(6,1) 打印
    Web.ExecWB(7,1) 打印预览
    Web.ExecWB(8,1) 打印页面设置
    Web.ExecWB(10,1) 查看页面属性
    Web.ExecWB(15,1) 好像是撤销,有待确认
    Web.ExecWB(17,1) 全选
    Web.ExecWB(22,1) 刷新
    Web.ExecWB(45,1) 关闭窗体无提示
    -->
    </center>
    </td>
    </tr>
    </thead>
    <tr>
    <td align="center" colspan="3" style="font-size: 24px">
    <b>报告印章申请表</b>
    </td>
    </tr>
    <tr>
    <td align="left" colspan="2">编号:A002</td>
    <td align="right"></td>
    </tr>
    <tr>
    <td colspan="3">
    <table class="tab" cellSpacing="0" cellPadding="0" width="100%">
    <tr align="center" height="23">
    <td width="10%" height="23"><b>编号</b></td>
    <td width="5%"><b>份数</b></td>
    <td width="12%"><b>项目/级别编号</b></td>
    <td width="12%"><b>单位</b></td>
    <td width="12%"><b>项目名称</b></td>
    <td width="12%"><b>工程地点</b></td>
    <td width="12%"><b>检测项目</b></td>
    <td width="7%"><b>单价</b></td>
    <td width="8%"><b>数量</b></td>
    <td width="10%"><b>总价</b></td>
    </tr>
    <tr style="font-size: 13px" align="center" height="23">
    <td>A14785</td>
    <td>5</td>
    <td>A1546/8975</td>
    <td>中国广东广州</td>
    <td>BRT工程</td>
    <td>广州天河</td>
    <td>BRT工程</td>
    <td>¥999999999.99</td>
    <td>20</td>
    <td>20*¥999999999.99</td>
    </tr>
    <tr align="center" height="23">
    <td colspan="2">备注</td>
    <td colspan="8"></td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    <hr class="noprint" width="100%" size="2"/>
    <div class="page"></div>
    <table class="tab" cellSpacing="0" cellPadding="0" width="100%">
    <tr align="center" height="23">
    <td width="10%" height="23"><b>编号</b></td>
    <td width="5%"><b>份数</b></td>
    <td width="12%"><b>项目/级别编号</b></td>
    <td width="12%"><b>单位</b></td>
    <td width="12%"><b>项目名称</b></td>
    <td width="12%"><b>工程地点</b></td>
    <td width="12%"><b>检测项目</b></td>
    <td width="7%"><b>单价</b></td>
    <td width="8%"><b>数量</b></td>
    <td width="10%"><b>总价</b></td>
    </tr>
    <tr style="font-size: 13px" align="center" height="23">
    <td>A14785</td>
    <td>5</td>
    <td>A1546/8975</td>
    <td>中国广东广州</td>
    <td>BRT工程</td>
    <td>广州天河</td>
    <td>BRT工程</td>
    <td>¥999999999.99</td>
    <td>20</td>
    <td>20*¥999999999.99</td>
    </tr>
    <tr align="center" height="23">
    <td colspan="2">备注</td>
    <td colspan="8"></td>
    </tr>
    </table>

    <div class="page"></div>
    <table class="tab" cellSpacing="0" cellPadding="0" width="100%">
    <tr align="center" height="23">
    <td width="10%" height="23"><b>编号</b></td>
    <td width="5%"><b>份数</b></td>
    <td width="12%"><b>项目/级别编号</b></td>
    <td width="12%"><b>单位</b></td>
    <td width="12%"><b>项目名称</b></td>
    <td width="12%"><b>工程地点</b></td>
    <td width="12%"><b>检测项目</b></td>
    <td width="7%"><b>单价</b></td>
    <td width="8%"><b>数量</b></td>
    <td width="10%"><b>总价</b></td>
    </tr>
    <tr style="font-size: 13px" align="center" height="23">
    <td>A14785</td>
    <td>5</td>
    <td>A1546/8975</td>
    <td>中国广东广州</td>
    <td>BRT工程</td>
    <td>广州天河</td>
    <td>BRT工程</td>
    <td>¥999999999.99</td>
    <td>20</td>
    <td>20*¥999999999.99</td>
    </tr>
    <tr align="center" height="23">
    <td colspan="2">备注</td>
    <td colspan="8"></td>
    </tr>
    </table>

    </body>
    </html>

     

     关于分页打印问题总结:主要是应用到了:page-break-after: always;   ///这个是分页标识

    写了个打印的服务,webapi调用方式,地址:https://pan.baidu.com/s/10HecSW_72tR0O_6SgdcRmA(密码:d22t)   

    1.实现分页打印源码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>分页打印</title>
    <script type="text/javascript">
    //部分打印方法
    function doPrint() {
    ////bdhtml = str;
    //console.log(str);
    //console.log(window.document.body.innerHTML);
    bdhtml = window.document.body.innerHTML;
    console.log(bdhtml);
    sprnstr = "<!--startprint-->";
    eprnstr = "<!--endprint-->";
    prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
    prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
    window.document.body.innerHTML = prnhtml;//页面取到的值实际是传递过来的字符串
    window.print();//开始打印
    }
    </script>
    </head>
    <body>
    <!-- <div style="page-break-after: always" >第一页:这是第一个页的内容<div id="page1"></div></div>
    <div style="page-break-after: always" >第二页: 这是第二个页的内容<div><span>早餐券</span></div></div>
    <div style="page-break-after: always" >第三页: 这是第三个页的内容</div> -->
    </body>
    </html>
    <!--startprint-->
    <div>
    <input type="button" value="打印" onclick="doPrint()" />
    </div>
    <div>
    <div style="page-break-after: always"> <!--这是实现分页标记---关键地方,有了它才能实现分页,这是第一页 -->
    <div id="bill06_part1">
    <div id="bill06_part1_title"><span id="HotelName">备课酒店</span></div >
    </div >
    <div id="bill06_part2">
    <div id="bill06_part2_left"><div id="bill06_part2_title"><span>早餐券</span></div></div>
    <div id="bill06_part2_right"><div id="bill06_part2_1_img"></div></div>
    </div>
    <div id="bill06_part3"><div id="bill06_part3_diningInformation"><div id="bill06_part3_diningInformation_top">
    <div class="keyDes"><span>用餐时间:</span></div><div class="valueDes"><span id="BreakFastTime">7:00-9:00</span></div > <br />
    <div class="keyDes"><span>Time:</span></div ><div class="valueDes" > <span id="BreakFastTime">7:00-9:00</span></div > <br />
    <div class="keyDes"><span>用餐地址:</span></div><br /><div class="keyDes"><span>Address:</span></div><div class="valueDes">
    <span id="BreakFastAddress">一楼食堂_千家万户</span></div></div></div>
    </div>
    <div id="bill06_part4">
    <div id="bill06_part4_message">
    <div id="bill06_part4_message_title"><span>用餐前请出示此券:</span></div>
    <div id="bill06_part4_message_content">
    <span>Please show this coupon before ordering</span><br />
    </div>
    </div>
    </div>
    <div id="bill06_part5">
    <div id="bill06_part5_message"><div id="bill06_part5_message_left"><div class="keyDes_All"><span>券号:</span></div><br />
    <div class="keyDes_All_Eng"><span>TicketNo:</span></div>
    <div class="valueDes_All_Eng"><span id="TicketNo">vyoxkf5LU9NQX</span></div><br />
    <div class="keyDes_All"><span>房号:</span></div><br />
    <div class="keyDes_All_Eng"><span>RoomNo:</span></div>
    <div class="valueDes_All_Eng"><span id="RoomNo">1203</span></div><br />
    <div class="keyDes_All"><span>经办人:</span></div><br />
    <div class="keyDes_All_Eng"><span>Print:</span></div><div class="valueDes_All_Eng"><span id="CurrentUser">蒋明春</span></div>
    </div><div id="bill06_part5_message_right"><div class="keyDes_All"><span>价格:</span></div><br />
    <div class="keyDes_All_Eng"><span>Price:</span></div><div class="valueDes_All_Eng"><span id="Price">10.00</span></div><br />
    <div class="keyDes_All"><span>有效期:</span></div><br /><div class="keyDes_All_Eng"><span>Validate:</span></div>
    <div class="valueDes_All_Eng"><span id="Validate">2019-06-13</span></div><br /><div class="keyDes_All"><span>打印时间:</span></div><br />
    <div class="keyDes_All_Eng"><span>PrintTime:</span></div>
    <div class="valueDes_All_Eng"><span id="PrintTime">2019-06-12 20:30:40</span></div></div></div>
    </div>
    </div>
    <div style="page-break-after: always"><!--这是实现分页标记---关键地方,有了它才能实现分页,这是第二页 -->
    <div id="bill06_part1">
    <div id="bill06_part1_title"><span id="HotelName">备课酒店</span></div >
    </div >
    <div id="bill06_part2">
    <div id="bill06_part2_left"><div id="bill06_part2_title"><span>早餐券</span></div></div>
    <div id="bill06_part2_right">
    <div id="bill06_part2_1_img">
    <div id="bill06_part2_1_img_canvas"></div>
    <img id="bill06_part2_1_img_src" />
    </div>
    </div>
    </div>
    <div id="bill06_part3"><div id="bill06_part3_diningInformation"><div id="bill06_part3_diningInformation_top">
    <div class="keyDes"><span>用餐时间:</span></div><div class="valueDes"><span id="BreakFastTime">7:00-9:00</span></div > <br />
    <div class="keyDes"><span>Time:</span></div ><div class="valueDes" > <span id="BreakFastTime">7:00-9:00</span></div > <br />
    <div class="keyDes"><span>用餐地址:</span></div><br /><div class="keyDes"><span>Address:</span></div><div class="valueDes">
    <span id="BreakFastAddress">一楼食堂_千家万户</span></div></div></div>
    </div>
    <div id="bill06_part4">
    <div id="bill06_part4_message">
    <div id="bill06_part4_message_title"><span>用餐前请出示此券:</span></div>
    <div id="bill06_part4_message_content">
    <span>Please show this coupon before ordering</span><br />
    </div>
    </div>
    </div>
    <div id="bill06_part5">
    <div id="bill06_part5_message"><div id="bill06_part5_message_left"><div class="keyDes_All"><span>券号:</span></div><br />
    <div class="keyDes_All_Eng"><span>TicketNo:</span></div>
    <div class="valueDes_All_Eng"><span id="TicketNo">vyoxkf5LU9NQX</span></div><br />
    <div class="keyDes_All"><span>房号:</span></div><br />
    <div class="keyDes_All_Eng"><span>RoomNo:</span></div>
    <div class="valueDes_All_Eng"><span id="RoomNo">1203</span></div><br />
    <div class="keyDes_All"><span>经办人:</span></div><br />
    <div class="keyDes_All_Eng"><span>Print:</span></div><div class="valueDes_All_Eng"><span id="CurrentUser">蒋明春</span></div>
    </div><div id="bill06_part5_message_right"><div class="keyDes_All"><span>价格:</span></div><br />
    <div class="keyDes_All_Eng"><span>Price:</span></div><div class="valueDes_All_Eng"><span id="Price">10.00</span></div><br />
    <div class="keyDes_All"><span>有效期:</span></div><br /><div class="keyDes_All_Eng"><span>Validate:</span></div>
    <div class="valueDes_All_Eng"><span id="Validate">2019-06-13</span></div><br /><div class="keyDes_All"><span>打印时间:</span></div><br />
    <div class="keyDes_All_Eng"><span>PrintTime:</span></div>
    <div class="valueDes_All_Eng"><span id="PrintTime">2019-06-12 20:30:40</span></div></div></div>
    </div>
    </div>
    </div>
    <!--endprint-->

     

     

    使用拼接内容打印:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>无标题文档</title> 
    <script language="javascript"> 
    //打印代码 
    function Print() 
    {

    /////拼接的打印内容
    var printStr = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head><body >"; 
    var content = ""; 

    var str = document.getElementById('page1').innerHTML; //获取需要打印的页面元素 ,page1元素设置样式page-break-after:always,意思是从下一行开始分割。 
    content = content + str; 
    str = document.getElementById('page2').innerHTML; //获取需要打印的页面元素 
    content = content + str; 

    printStr = printStr+content+"</body></html>"; 
    var pwin=window.open("Print.htm","print"); //如果是本地测试,需要先新建Print.htm,如果是在域中使用,则不需要 
    pwin.document.write(printStr); 
    pwin.document.close(); //这句很重要,没有就无法实现 
    pwin.print(); 

    </script> 
    </head> 

    <body > 
    <div><input type="button" value="打印" onclick="Print()" /></div> 
    <div id="page1"> 
    <table width="100%" border="0" cellpadding="0" cellspacing="0" style="page-break-after:always" > 
    <tr><td>第一页打印内容</td></tr> 
    </table> 
    </div> 
    <div id="page2"> 
    <table width="100%" border="0" cellpadding="0" cellspacing="0" id="content" > 
    <tr><td>第二页打印内容</td></tr> 
    </table> 
    </div> 
    </body> 
    </html>

     

    JS 实现分页打印:转自:https://www.cnblogs.com/wind-wang/p/6902824.html

    在调用window.print()时,可以实现打印效果,但内容太多时要进行分页打印。

    在样式中有规定几个打印的样式

    page-break-before和page-break-after CSS属性并不会修改网页在屏幕上的显示,这两个属性是用来控制文件的打印方式。

    每个打印属性都可以设定4种设定值:auto、always、left和right。其中Auto是默认值,只有在有需要时,才需设定分页符号 (Page breaks)。

    page-break-before若设定成always,则是在遇到特定的组件时,打印机会重新开始一个新的打印页。

    page-break-before若设定成left,则会插入分页符号,直到指定的组件出现在一个左边的空白页上。

    page-break-before若设定成right,则会插入分页符号,直到指定的组件出现在一个右边的空白页上。

    page-break-after属性会将分页符号加在指定组件后,而非之前。

    在下列程序中您将可以看到这些属性的设定,

     

    复制代码
    <HTML>
      <HEAD>
        <TITLE>Listing 14-4</TITLE>
      </HEAD>
      <BODY>
        <DIV>This is the first DIV.</DIV>
        <DIV STYLE="page-break-before:always">This is the second DIV.</DIV>
        <DIV STYLE="page-break-after:always">This is the third DIV.</DIV>
        <DIV>This is the fourth DIV.</DIV>
        <DIV STYLE="page-break-before:right">This is the fifth DIV.</DIV>
        <DIV STYLE="page-break-after:right">This is the sixth DIV.</DIV>
        <DIV>This is the last DIV.</DIV>
      </BODY>
    </HTML>
    复制代码
    描述
    auto 默认值。如果必要则在元素前插入分页符
    always 在元素前插入分页符
    avoid 避免在元素前插入分页符
    left 在元素之前足够的分页符,一直到一张空白的左页为止
    right 在元素之前足够的分页符,一直到一张空白的右页为止
    inherit 规定应该从父元素继承 page-break-before 属性的设置

    在Dom对象中pageBreakBefore属性

    语法:

        Object.style.pageBreakBefore=auto|always|avoid|left|right

    复制代码
    <html>
      <head>
        <script type="text/javascript">
          function setPageBreak()
          {
            document.getElementById("p2").style.pageBreakBefore="always";
          }
        </script>
      </head>
      <body>
        <p>This is a test paragraph.</p>
        <input type="button" onclick="setPageBreak()" value="Set page-break" />
        <p id="p2">This is also a test paragraph.</p>
      </body>
    </html>
    复制代码

     

     

    js控制分页打印、打印分页示例:

    转自:https://www.jb51.net/article/46542.htm

    代码如下:


    <%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <HTML> 
    <HEAD> 
    <TITLE>javascript打印-打印页面设置-打印预览代码</TITLE> 
    <META http-equiv=Content-Type content="text/html; charset=gb2312" /> 
    <style media=print> 
    .Noprint{display:none;} 
    .PageNext{page-break-after: always;} 
    </style> 
    <SCRIPT language=javascript> 
      function printsetup(){ 
      // 打印页面设置 
      wb.execwb(8,1); 
      } 
      function printpreview(){ 
      // 打印页面预览   
      wb.execwb(7,1); 
      } 
      function printit() 
      { 
      if (confirm('确定打印吗?')) { 
      wb.execwb(6,6) 
      } 
      } 
    </SCRIPT> 

    </HEAD> 
    <BODY> 

    <DIV align=center> 
    <OBJECT id=wb height=0 width=0 
    classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 name=wb></OBJECT> 
    <INPUT onclick=javascript:printit() type=button value=打印 name=button_print /> 
    <INPUT onclick=javascript:printsetup(); type=button value=打印页面设置 name=button_setup /> 
    <INPUT onclick=javascript:printpreview(); type=button value=打印预览 name=button_show /> 
    </DIV> 
    111</br> 
    111</br> 
    111</br> 
    <div class="PageNext"></div> 
    222</br> 
    222</br> 
    222</br> 
    <div class="PageNext"></div> 
    333</br> 
    333</br> 
    333</br> 
    <div class="PageNext"></div> 
    444</br> 
    444</br> 
    444</br> 
    <div class="PageNext"></div> 
    555</br> 
    555</br> 
    555</br> 
    </BODY> 
    </HTML> 
    复制代码代码如下:

    <html> 
    <title>JS 分页批量打印解决方案(只支持IE)</title> 
    <script language="javascript"> 
    function printWithAlert() { 
    document.all.WebBrowser.ExecWB(6,1); 

    function printWithoutAlert() { 
    document.all.WebBrowser.ExecWB(6,6); 

    function printSetup() { 
    document.all.WebBrowser.ExecWB(8,1); 

    function printPrieview() { 
    document.all.WebBrowser.ExecWB(7,1); 

    function printImmediately() { 
    document.all.WebBrowser.ExecWB(6,6); 
    window.close(); 

    </script> 
    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 style="display:none"> 
    </OBJECT> 
    </noscript> 
    <style media=print> 
    .Noprint{display:none;} .PageNext{page-break-after: always;} 
    </style> 
    <table align="center" class="NOPRINT"> 
    <tr> 
    <td align="center"><BUTTON title=打印 onclick=printWithAlert()>打印</BUTTON> 
    <BUTTON title=直接打印 onclick=printWithoutAlert()>直接打印</BUTTON> 
    <input type=button value="打印设置" onClick="printSetup()" > 
    <button onclick ='printPrieview()' title='打印预览...' >打印预览</button></td> 
    </tr> 
    </table> 
    <div class="NOPRINT"> 以下为打印区:<br> 
    </div> 
    <hr size=1 noshadow color=black class="NOPRINT" > 
    <table class="PageNext" > 
    <tr> 
    <td colspan=2> 
    第一页的内容 
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 
    </td> 
    </tr> 
    </table> 
    <hr size=1 noshadow color=black class="NOPRINT" > 
    <div class="PageNext"> 
    第二页内容 
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 
    </div> 
    <hr size=1 noshadow color=black class="NOPRINT" > 
    第三页内容 
    </html> 

     

     

    补充:分页打印demo源码:对应自己项目:Yh.Hms.Web

    页面:06.html

    <html>
    <head>
    <meta charset="utf-8" />
    <title>
    </title>
    <link rel="stylesheet" href="../CSS/06.css" />
    <script src="../JS/jquery-1.10.2.min.js"></script>
    <script src="../JS/jquery.qrcode.min.js"></script>
    <script src="../JS/06.js"></script>
    <script src="../JS/printhandler.js"></script>
    <script src="../../../../Scripts/universal/ajax_REST-1.0.js"></script>
    <script src="../../../../Scripts/universal/unitity.js"></script>
    </head>
    <body>
    <!--startprint-->
    <div id="template">
    <div id="bill06_part0" style="page-break-after: always">
    <div id="bill06_part1">
    <div id="bill06_part1_title">
    <span id="HotelName"name="hotelName"></span>
    </div>
    </div>
    <div id="bill06_part2">
    <div id="bill06_part2_left">
    <div id="bill06_part2_title">
    <span>早餐券</span>
    </div>
    </div>
    <div id="bill06_part2_right">
    <div id="bill06_part2_1_img">
    <!--二维码-->
    <div id="bill06_part2_1_img_canvas" class="qrCode"></div>
    </div>
    </div>
    </div>
    <div id="bill06_part3">
    <div id="bill06_part3_diningInformation">
    <div id="bill06_part3_diningInformation_top">
    <div class="keyDes"><span>用餐时间:</span></div><div class="valueDes"><span id="BreakFastTime" name="breakfastTime"></span></div><br />
    <div class="keyDes"><span>Time:</span></div><div class="valueDes"><span id="BreakFastTime" name="breakfastTime"></span></div><br />
    <div class="keyDes"><span>用餐地址:</span></div><br />
    <div class="keyDes"><span>Address:</span></div> <div class="valueDes"><span id="BreakFastAddress" name="breakfastAddress"></span></div>
    </div>
    </div>
    </div>
    <div id="bill06_part4">
    <div id="bill06_part4_message">
    <div id="bill06_part4_message_title"><span>用餐前请出示此券:</span></div>
    <div id="bill06_part4_message_content">
    <span>Please show this coupon before ordering</span><br />
    </div>
    </div>
    </div>
    <div id="bill06_part5">
    <div id="bill06_part5_message">
    <div id="bill06_part5_message_left">
    <div class="keyDes_All"><span>券号:</span></div><br />
    <div class="keyDes_All_Eng0"><span>TicketNo:</span></div> <div class="valueDes_All_Eng0"><span id="TicketNo" class="underline" ></span></div><br />
    <div class="keyDes_All"><span>房号:</span></div><br />
    <div class="keyDes_All_Eng"><span>RoomNo:</span></div> <div class="valueDes_All_Eng"><span id="RoomNo" class="underline" ></span></div><br />
    <div class="keyDes_All"><span>经办人:</span></div><br />
    <div class="keyDes_All_Eng"><span>Print:</span></div> <div class="valueDes_All_Eng"><span id="CurrentUser" class="underline" name="printUser" ></span></div>
    </div>
    <div id="bill06_part5_message_right">
    <div class="keyDes_All"><span>价格:</span></div><br />
    <div class="keyDes_All_Eng1"><span>Price:</span></div> <div class="valueDes_All_Eng1"><span id="Price" name="price" class="underline" ></span></div><br />
    <div class="keyDes_All"><span>有效期:</span></div><br />
    <div class="keyDes_All_Eng1"><span>Validate:</span></div> <div class="valueDes_All_Eng1"><span id="Validate" name="validDate" class="underline" ></span></div><br />
    <div class="keyDes_All"><span>打印时间:</span></div><br />
    <div class="keyDes_All_Eng1"><span>PrintTime:</span></div> <div class="valueDes_All_Eng1"><span id="PrintTime" name="printTime" class="underline" ></span></div>
    </div>
    </div>
    </div>
    </div>
    </div>
    <!--endprint-->
    </body>
    </html>

    页面对应06.js:

    /// <reference path="../../../../Scripts/universal/unitity.js"/>  <!--在06.js中引用unitity.js文件-->

    /*早餐券 add by jackjiang20190606*/
    //定义全局变量
    var coupons = "";
    var re = "";
    var price = "";
    var hotelcode = "";
    var validDate = "", couponNo = "";

    $(function () {
    coupons = GetQueryString("ticketNos").split(',');//早餐券号
    price = Number(GetQueryString("price")).toFixed(2);//早餐券价格,toFixed(2)金额保留2位
    let accountNos = GetQueryString("accountNos");//单号
    hotelcode = GetQueryString("hotelCode");//酒店编号

    if (hotelcode != null && hotelcode.length > 6) {
    alert("参数异常请刷新页面");
    }
    let div_qrCode = "#bill06_part2_1_img_canvas";//二维码
    let div_Span_ticketNo = "#TicketNo";//券号

    for (let i = 0; i < coupons.length; i++) {

    let tempValues = coupons[i].split('|');
    couponNo = tempValues[0];//早餐券号
    validDate = tempValues[1].substring(0,10);//有效期转化为2019/06/06格式

    let code = "{0}|{1}".format(hotelcode, couponNo);
    let qrCodeX = $(div_qrCode).qrcode(
    {
    render: "canvas",
    100,
    height: 100,
    text: code,
    correctLevel: 1
    }
    );
    let canvas = $(div_qrCode + " canvas")[0];
    let base64 = canvas.toDataURL("image/png");
    let img1 = "<img src='{0}'/>".format(base64);
    qrCodeX.html(img1);//二维码图片
    $(div_Span_ticketNo).html(couponNo);//券号
    }
    GetPrintBreakfastTicketData(accountNos);
    });

    //部分打印方法
    function doPrint() {
    ////bdhtml = str;
    //console.log(str);
    //console.log(window.document.body.innerHTML);
    //bdhtml = window.document.body.innerHTML;
    //console.log(bdhtml);
    //sprnstr = "<!--startprint-->";
    //eprnstr = "<!--endprint-->";
    //prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr) + 17);
    //prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr));
    //window.document.body.innerHTML = prnhtml;//页面取到的值实际是传递过来的字符串
    window.print();
    }
    //获取传输参数
    function GetQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]); return null;
    }

    function GetPrintBreakfastTicketData(accountNos) {
    let ajaxUrl = "/Report/Print/GetBreakfastDataOfPrint";
    let successFunc = FillBreakfastTemplateInfo;
    let jsonText = { AccountNos: accountNos };

    ajax_json_postV2(ajaxUrl, jsonText, 10000, true, successFunc, null, null);
    }

    function FillBreakfastTemplateInfo(jsonModel) {
    if (!jsonModel.Success) {
    return;
    }
    let model = jsonModel.Data;
    //批量设置模版数值
    $("[name=hotelName]").html(model.HotelName);//酒店名称
    $("[name=breakfastTime]").html(model.BreakfastTime);//用餐时间
    $("[name=breakfastAddress]").html(model.BreakfastAddress);//用餐地址
    $("[name=printUser]").html(model.PrintUser);//打印人
    $("[name=printTime]").html(model.PrintTime);//打印时间


    let roomNos = model.RoomNos.split(',');
    var div_qrCode = "#bill06_part2_1_img_canvas";//二维码
    var div_Span_ticketNo = "#TicketNo";//券号
    var div_Span_roomNo = "#RoomNo";//房间号
    for (var i = 0; i < coupons.length; i++) {

    //批量设置早餐券房间
    let roomNo = !roomNos[i] ? roomNos[0] : roomNos[i];
    $(div_Span_roomNo).html(roomNo);//房间号

    let tempValues = coupons[i].split('|');
    couponNo = tempValues[0];//早餐券号
    validDate = tempValues[1].substring(0, 10);//有效期转化为2019/06/06格式

    let code = "{0}|{1}".format(hotelcode, couponNo);
    let qrCodeX = $(div_qrCode).qrcode(
    {
    render: "canvas",
    100,
    height: 100,
    text: code,
    correctLevel: 1
    }
    );
    let canvas = $(div_qrCode + " canvas")[0];
    let base64 = canvas.toDataURL("image/png");
    let img1 = "<img src='{0}'/>".format(base64);
    qrCodeX.html(img1);//二维码图片

    $(div_Span_ticketNo).html(couponNo);//券号
    $(div_Span_roomNo).html(roomNo);//房间号

    //批量设置模板数值
    $("[name=price]").html(price);//早餐券价格
    $("[name=validDate]").html(validDate);//有效期

    var div_part0Content = document.getElementById('template').innerHTML;
    re += '<div>' + div_part0Content +
    '</div>';
    }
    window.document.body.innerHTML = re;//为页面元素赋值
    //打印
    doPrint();
    //打印后关闭当前窗口
    let index = parent.layer.getFrameIndex(window.name);
    parent.layer.close(index);
    }

    页面对应06.css

    body {
    margin-top: 0px;
    }
    #bill06_part0 {
    300px;
    height: auto;
    margin-top: 0px;
    }

    #bill06_part1 {
    /*background-color:red;*/
    300px;
    height: 70px;
    margin-top: 0px;
    }
    #bill06_part1_title {
    /*background-color: darkgrey;*/
    float: left;
    300px;
    height: auto;
    text-align: center;
    font-size: 15pt;
    /*opacity: .95;*/
    margin-top: 0px;
    font-weight: bold;
    }

    #bill06_part1_title span {
    300px;
    height: auto;
    text-align: center;
    font-size: 15pt;
    /*opacity: .95;*/
    margin-top: 0px;
    font-weight: bold;
    font-family: KaiTi;
    }
    /*part2 早餐券和二维码*/
    #bill06_part2 {
    /*background-color:red;*/
    300px;
    height: 100px;
    }

    #bill06_part2_left {
    180px;
    height: 100px;
    float: left;
    }

    #bill06_part2_title span {
    float: left;
    180px;
    height: auto;
    text-align: center;
    font-size: 20pt;
    /*opacity: .95;*/
    margin-top: 15px;
    /*font-weight: 900;*/ /*bold*/
    font-family: KaiTi;
    }

    #bill06_part2_right {
    120px;
    height: 100px;
    float: right;
    }

    /*二维码*/
    #bill06_part2_1_img {
    /*background-color: darkgray;*/
    padding-top: 5px;
    100px;
    height: 100px;
    float: right;
    /*opacity: .65;*/
    }
    .qrCode {
    float: right;
    }


    #PaymentTypeName {
    font-size: 9pt;
    font-weight: bold;
    }

    #Balance {
    font-size: 9pt;
    font-weight: bold;
    }

    /*part3用餐信息*/
    #bill06_part3 {
    /*background-color:red;*/
    300px;
    height: 100px;
    }

    #bill06_part3_diningInformation_top {
    /*background-color: cornflowerblue;*/
    float: left;
    300px;
    height: auto;
    padding-top: 5px;
    /*opacity: .95;*/
    /*border-bottom: 1px dashed #000;*/
    }
    /*part4提示信息,messge*/
    #bill06_part4 {
    /*background-color:red;*/
    300px;
    height: 45px;
    }

    #bill06_part4_message {
    /*background-color: antiquewhite;*/
    float: left;
    300px;
    height: 100%;
    /*opacity: .95;*/
    border-bottom: 1px dashed #000;
    }

    #bill06_part4_message_title {
    font-size: 9pt;
    font-weight: bold;
    }

    #bill06_part4_message_content span {
    font-size: 9pt;
    /*background-color: cornflowerblue;*/
    }
    /*part5 早餐券详细信息,messge*/
    #bill06_part5 {
    /*background-color:red;*/
    300px;
    height: 200px;
    }

    #bill06_part5_message {
    /*background-color: brown;*/
    float: left;
    300px;
    height: 100%;
    /*opacity: .95;*/
    min-height: 150px;
    /*border-bottom: 1px solid #000;*/
    }

    #bill06_part5_message_left {
    165px;
    height: auto;
    float: left;
    }

    #bill06_part5_message_right {
    135px;
    height: auto;
    float: left;
    }
    /*附加的内部span样式*/
    .keyDes {
    float: left;
    /*background-color:darkcyan;*/
    95px;
    }
    .keyDes span {
    font-size: 6pt;
    }

    .valueDes {
    float: left;
    /*background-color:darkgreen;*/
    205px;
    }
    .valueDes span {
    font-size: 6pt;
    }

    .keyDes_All {
    float: left;
    /*background-color:darkcyan;*/
    70px;
    }
    .keyDes_All span{
    font-size: 6pt;
    }

    .valueDes_All {
    float: left;
    /*background-color:darkgreen;*/
    80px;

    }

    .keyDes_All_Eng0 {
    float: left;
    /*background-color:darkcyan;*/
    60px;
    }
    .keyDes_All_Eng0 {
    float: left;
    /*background-color:darkcyan;*/
    60px;
    }
    .keyDes_All_Eng1 {
    float: left;
    /*background-color:darkcyan;*/
    57px;
    }
    .keyDes_All_Eng {
    float: left;
    /*background-color:darkcyan;*/
    60px;
    }
    .keyDes_All_Eng span {
    font-size: 6pt;
    }
    .keyDes_All_Eng0 span {
    font-size: 6pt;
    }
    .keyDes_All_Eng1 span {
    font-size: 6pt;
    }

    .valueDes_All_Eng0 {
    float: left;
    /*background-color:darkgreen;*/
    105px;
    }
    .valueDes_All_Eng1 {
    float: left;
    /*background-color:darkgreen;*/
    78px;
    }
    .valueDes_All_Eng0 span {
    font-size: 6pt;
    }
    .valueDes_All_Eng1 span {
    font-size: 6pt;
    }
    .valueDes_All_Eng {
    float: left;
    /*background-color:darkgreen;*/
    90px;
    }
    .valueDes_All_Eng span {
    font-size: 6pt;
    }
    .valueDes_All_Eng0 span {
    font-size: 6pt;
    }

    .underline {
    text-decoration: underline;
    }

     纯JS实现分页

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>纯JS实现分页</title>
    <!-- <script type="text/javascript" src="page.javascript">
    把下面的的函数放到page.js中也可以
    </script> -->
    <script type="text/javascript">
    /**
    * 分页函数
    * pno--页数
    * psize--每页显示记录数
    * 分页部分是从真实数据行开始,因而存在加减某个常数,以确定真正的记录数
    * 纯js分页实质是数据行全部加载,通过是否显示属性完成分页功能
    **/
    function goPage(pno,psize){
    var itable = document.getElementById("idData");
    var num = itable.rows.length;//表格所有行数(所有记录数)
    console.log(num);
    var totalPage = 0;//总页数
    var pageSize = psize;//每页显示行数
    //总共分几页
    if(num/pageSize > parseInt(num/pageSize)){
    totalPage=parseInt(num/pageSize)+1;
    }else{
    totalPage=parseInt(num/pageSize);
    }
    var currentPage = pno;//当前页数
    var startRow = (currentPage - 1) * pageSize+1;//开始显示的行 31
    var endRow = currentPage * pageSize;//结束显示的行 40
    endRow = (endRow > num)? num : endRow; 40
    console.log(endRow);
    //遍历显示数据实现分页
    for(var i=1;i<(num+1);i++){
    var irow = itable.rows[i-1];
    if(i>=startRow && i<=endRow){
    irow.style.display = "block";
    }else{
    irow.style.display = "none";
    }
    }
    var pageEnd = document.getElementById("pageEnd");
    var tempStr = "共"+num+"条记录 分"+totalPage+"页 当前第"+currentPage+"页";
    if(currentPage>1){
    tempStr += "<a href="#" onClick="goPage("+(1)+","+psize+")">首页</a>";
    tempStr += "<a href="#" onClick="goPage("+(currentPage-1)+","+psize+")"><上一页</a>"
    }else{
    tempStr += "首页";
    tempStr += "<上一页";
    }

    if(currentPage<totalPage){
    tempStr += "<a href="#" onClick="goPage("+(currentPage+1)+","+psize+")">下一页></a>";
    tempStr += "<a href="#" onClick="goPage("+(totalPage)+","+psize+")">尾页</a>";
    }else{
    tempStr += "下一页>";
    tempStr += "尾页";
    }

    document.getElementById("barcon").innerHTML = tempStr;
     
    }
    </script>
    <style type="text/css">
    #idData {color: red;border: solid;text-align: center;}
    a{text-decoration: none;}
    </style>
    </head>
    <body onLoad="goPage(1,10);">
    <table id="idData" width="70%">
    <tr><td>张锋1</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋2</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋3</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋4</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋5</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋6</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋7</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋8</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋9</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋10</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋11</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋12</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋13</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋14</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋15</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋16</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋17</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋18</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋19</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋20</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋21</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋22</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋23</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋24</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋18</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋26</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋27</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋28</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋29</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋30</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋31</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋32</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋33</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋34</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋35</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋36</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋37</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋38</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋39</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    <tr><td>张锋40</td><td>18</td><td>男</td><td>上海市长宁</td></tr>
    </table>
    <table width="60%" align="right">
    <tr><td><div id="barcon" name="barcon"></div></td></tr>
    </table>
    </body>
    </html>

     

     

     

  • 相关阅读:
    【部分原创】标准C语言的优先级、结合性、求值顺序、未定义行为和非确定行为浅析
    &&、||、?:、,四个运算符的求值顺序
    [转]说说C语言运算符的“优先级”与“结合性”
    初识Nginx,简单配置实现负载均衡(ubuntu + Nginx + tomcat)
    Hadoop伪分布式模式安装
    HBase hbase-site.xml 参数
    HBase单机环境搭建
    Hadoop单机模式安装
    JAVA笔记整理(一),JAVA介绍
    JAVA笔记整理(十),JAVA中的File
  • 原文地址:https://www.cnblogs.com/newcapecjmc/p/11088438.html
Copyright © 2011-2022 走看看