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 相关文章推荐
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
Sep 05 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
在JavaScript中使用timer示例
May 08 Javascript
jQuery控制TR显示隐藏的几种方法
Jun 18 Javascript
在JavaScript中使用开平方根的sqrt()方法
Jun 15 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
Aug 08 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
jQuery实现动态删除LI的方法
May 30 jQuery
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
小程序点击图片实现自动播放视频
May 29 Javascript
详解VUE前端按钮权限控制
Apr 26 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制作静态网站的模板框架(二)
2006/10/09 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript实现找出数组中最长的连续数字序列
2014/09/03 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
vue和iview实现Scroll 数据无限滚动功能
2019/10/31 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
python中函数传参详解
2016/07/03 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
如何使用python切换hosts文件
2020/04/29 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
自动化专业毕业生自荐信
2013/11/01 职场文书
中班幼儿评语大全
2014/04/30 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
律政俏佳人观后感
2015/06/09 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
Mysql中常用的join连接方式
2022/05/11 MySQL