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 相关文章推荐
最新优化收藏到网摘代码(digg,diigo)
Feb 07 Javascript
随机显示经典句子或诗歌的javascript脚本
Aug 04 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
Apr 30 Javascript
js实现的四级左侧网站分类菜单实例
May 06 Javascript
javascript处理a标签超链接默认事件的方法
Jun 29 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
Apr 12 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
Sep 12 Javascript
如何在JavaScript中正确处理变量
Dec 25 Javascript
ReactRouter的实现方法
Jan 25 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下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
2020/05/02 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
PHP之header函数详解
2021/03/02 PHP
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python socket聊天脚本代码实例
2020/01/02 Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
2020/06/12 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
运动会广播稿400字
2014/01/25 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
初中生毕业评语
2014/12/29 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
一篇合格的广告文案,其主要目的是什么?
2019/07/12 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
nginx+lua单机上万并发的实现
2021/05/31 Servers