JS实现快递单打印功能【推荐】


Posted in Javascript onJune 21, 2018

最近做项目需要打印快递单,在网上搜索了一下发现直接给出代码的比较少。

 首先说一下js网页打印的几种方法:

1.window.print()

会弹出打印对话框

2.使用html 标签引入Webbrowser控件

 这种方式是其只兼容IE10以下的浏览器,其他浏览器不可使用

3.document.execCommand(”print”)

类似window.print() 

 **4.采用JQuery插件

5.用浏览器打印第三方插件如lodpod等**

由于我这边不需要兼容ie10以下,而且个人不喜欢在react项目中引入jquery,同时嫌第三方插件太麻烦,最终选择window.print(),具体这几种方法区别大家可以去网上查一下,这类博客很多。

 废话不多说,直接贴代码

<!DOCTYPE html>
<html>
<head>
  <meta charset=" utf-8">
  <title>打印</title>
  <link rel="stylesheet" href="./print.css" rel="external nofollow" type="text/css">
  <style type="text/css">
    @import url("print.css") print;
  </style>
  <script language="javascript">
      function remove_ie_header_and_footer() {
        let HKEY_Root, HKEY_Path, HKEY_Key;
        HKEY_Root = "HKEY_CURRENT_USER";
        HKEY_Path = "\\Software\\Microsoft\\Internet Explorer\\PageSetup\\";
        try {
          let RegWsh = new ActiveXObject("WScript.Shell");
          HKEY_Key = "header";
          RegWsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
          HKEY_Key = "footer";
          RegWsh.RegWrite(HKEY_Root + HKEY_Path + HKEY_Key, "");
        }
        catch (e) {}
      }
      function printPage(printpage)
      {
        if (!!window.ActiveXObject || "ActiveXObject" in window) { //是否ie
          remove_ie_header_and_footer();
        }
        let newstr = printpage.innerHTML;
        let oldstr = document.body.innerHTML;
        document.body.innerHTML =newstr;
        window.print();
        document.body.innerHTML=oldstr;
        return false;
      }
      window.onload = function()
      {
        let bt=document.getElementById("bt");
        let page=document.getElementById("printPage");
        bt.onclick=function()
        {
          printPage(page);
        }
      }
  </script>
</head>
<body>
<!--startPrint-->
<div id="printPage" >
  <div id="emsType" class="left">
    <span class="deviation">标准快递</span>
  </div>
  <div id="barcode" class="right">
    <span class="deviation">二维码</span>
  </div>
  <div id="sender" class="left">
    <span class="deviation">寄件:</span>
    <span>xxxx</span>
  </div>
  <div id="area" class="right">
    <span class="deviation">xxx区</span>
  </div>
  <div id="recipient" class="left">
    <span class="deviation">收件:</span>
    <span class="deviation">xxxx人xxxx手机xxxxxxx</span>
    <span class="deviation">xxxxxxxx小区</span>
  </div>
  <div id="pay" class="left">
    <span class="deviation">付款方式:</span>
    <span></span>
    <br/>
    <span class="deviation">计费重量(KG):</span>
    <span></span>
    <br/>
    <span class="deviation">保价金额(元):</span>
    <span></span>
    <br/>
  </div>
  <div id="delivers" class="right">
    <span class="deviation">收件人\代收人:</span>
    <span></span>
    <br/>
    <span class="deviation">签收时间:</span>
    <span></span>
    <span>年</span>
    <span></span>
    <span>月</span>
    <span></span>
    <span>日</span>
    <span></span>
    <span>时</span>
    <br/>
    <span id="note">快件送达收货人地址,经收件人或收件人允许的代收人签字,视为送达</span>
  </div>
  <div id="order" class="left">
    <span class="deviation">订单号:</span>
    <span></span>
    <span class="deviation">件数:</span>
    <span></span>
    <span class="deviation">重量(KG):</span>
    <span></span>
    <span></span>
  </div>
  <div id="divide" class="left">
  </div>
  <div id="number" class="left right">
    <span class="deviation">条码</span>
  </div>
  <div id="send" class="left right">
    <span class="deviation">寄件:</span>
    <span></span>
  </div>
  <div id="pickup" class="right">
    <span class="deviation">收件:</span>
    <span></span>
  </div>
  <div id="remark" class="left">
    <span class="deviation">备注:</span>
    <span></span>
  </div>
  <div id="net" class="left">
    <span class="deviation">www.ems.cn      客服电话:11183</span>
  </div>
  <div id="QRCode" class="right">
    <span class="deviation">二维码</span>
  </div>
</div>
<!--endPrint-->
<input name="print" class=" no-print" type="button" id="bt" value="点击打印" />
</body>
</html>

通过css3 print控制打印样式,不需要打印的可以通过添加 class为noPrint来隐藏

@media print{
  body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
  body, button, input, select, textarea { font:12px/1.5 arial,"黑体", \5b8b\4f53; }
  h1, h2, h3, h4, h5, h6{ font-size:100%; }
  address, cite, dfn, em, var { font-style:normal; }
  code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
  small{ font-size:12px; }
  ul, ol { list-style:none; }
  a { text-decoration:none; }
  a:hover { text-decoration:underline; }
  sup { vertical-align:text-top; }
  sub{ vertical-align:text-bottom; }
  legend { color:#000; }
  fieldset, img { border:0; }
  button, input, select, textarea { font-size:100%; }
  table { border-collapse:collapse; border-spacing:0; }
  .no-print{
    display:none;
  }
  @page{
    size: 100mm 150mm;
    margin: 1.75mm;
  }
  #printPage {
    width: 96mm;
    height: 146mm;
    position: relative;
    border: 1px dotted #000000;
    box-sizing: border-box;
  }
  #printPage span{
    margin-left: 2mm;
  }
  .left {
    border-left: 1px dotted #000000;
    border-right: 1px dotted #000000;
    border-bottom: 1px dotted #000000;
    left: 0;
  }
  .right {
    border-right: 1px dotted #000000;
    border-bottom: 1px dotted #000000;
    /*right: 0;*/
  }
  .deviation{
    margin-left: 2mm;
  }
  #emsType{
    width: 40mm;
    height: 14mm;
    position: absolute;
    top: 0;
    padding-top: 6mm;
    font-size: 20px;
    border-top: 1px dotted #000000;
  }
  #barcode{
    width: 56mm;
    height: 20mm;
    position: absolute;
    top: 0;
    left: 40mm;
    border-top: 1px dotted #000000;
  }
  #sender{
    width: 46mm;
    height: 15mm;
    font-size: 12px;
    position: absolute;
    top: 20mm;
  }
  #area{
    width: 50mm;
    height: 15mm;
    position: absolute;
    top: 20mm;
    left: 46mm;
  }
  #recipient{
    width: 96mm;
    height: 17mm;
    position: absolute;
    left: 0;
    top: 35mm;
    font-size: 12px;
  }
  #pay{
    width: 40mm;
    height: 14mm;
    position: absolute;
    top: 52mm;
    font-size: 12px;
  }
  #delivers{
    width: 56mm;
    height: 14mm;
    position: absolute;
    top: 52mm;
    left: 40mm;
    font-size: 12px;
  }
  #order{
    width: 96mm;
    height: 20mm;
    position: absolute;
    left: 0;
    top: 66mm;
    font-size: 12px;
  }
  #divide{
    width: 96mm;
    height: 4mm;
    position: absolute;
    left: 0;
    top: 86mm;
  }
  #number{
    width: 96mm;
    height: 15mm;
    position: absolute;
    left: 0;
    top: 90mm;
    font-size: 12px;
  }
  #send{
    width: 40mm;
    height: 17mm;
    position: absolute;
    top: 105mm;
    font-size: 12px;
  }
  #pickup{
    width: 56mm;
    height: 17mm;
    position: absolute;
    top: 105mm;
    left: 40mm;
    font-size: 12px;
  }
  #remark{
    width: 68mm;
    height: 17mm;
    position: absolute;
    top: 122mm;
    font-size: 12px;
  }
  #net{
    width: 68mm;
    height: 7mm;
    position: absolute;
    top: 139mm;
    font-size: 12px;
  }
  #QRCode{
    width: 28mm;
    height: 24mm;
    position: absolute;
    top: 122mm;
    left: 68mm;
  }
  #note{
    font-size: 6px;
  }
}

一开始在ff和chrome打印出来的会有细微差别,这是由于浏览器自带样式的影响,清除浏览器样式后基本没区别了还有就是chrome需要将浏览器设置里自定义字体中最小字体调到最低,不然会影响打印效果 ff这需要在打印里设置页头页脚为空白,不然打印的带页头页脚。 

 此外chrome打印出来的比ff清楚,这点原因我还没搞清楚。 

 贴两张打印预览,上面是chrome,下面是ff

JS实现快递单打印功能【推荐】
JS实现快递单打印功能【推荐】

Javascript 相关文章推荐
小议javascript 设计模式 推荐
Oct 28 Javascript
jquery复选框全选/取消示例
Dec 30 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
有效提高JavaScript执行效率的几点知识
Jan 31 Javascript
javascript实现简单的页面右下角提示信息框
Jul 31 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
Nov 17 Javascript
原生javascript实现分页效果
Apr 21 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 Javascript
详解javascript中的babel到底是什么
Jun 21 #Javascript
webpack打包react项目的实现方法
Jun 21 #Javascript
Vue Router的懒加载路径的解决方法
Jun 21 #Javascript
详解如何使用webpack打包JS
Jun 21 #Javascript
vue自定义一个v-model的实现代码
Jun 21 #Javascript
JS实现模糊查询带下拉匹配效果
Jun 21 #Javascript
浅析Vue 生命周期
Jun 21 #Javascript
You might like
PHP三元运算符的结合性介绍
2012/01/10 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
js弹窗代码 可以指定弹出间隔
2010/07/03 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
一个简单的瀑布流效果(主体形式自写)
2013/05/27 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
Bootstrap实现渐变顶部固定自适应导航栏
2020/08/27 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
python利用正则表达式提取字符串
2016/12/08 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
浅析python继承与多重继承
2018/09/13 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
公务员综合考察材料
2014/02/01 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
产假请假条
2014/04/10 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
工作态度怎么写
2015/06/25 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
《比尾巴》教学反思
2016/02/24 职场文书