利用jqprint插件打印页面内容的实现方法


Posted in Javascript onJanuary 09, 2018

业务场景

客户需要在页面有一个打印按钮,点击之后可以打印Echarts图表的内容以及文字提示信息,经谷歌搜索发现,实现方法大概有三种之多,其他两种不太熟悉,而采用的这种打印方式是一个在jQuery的基本上开发的一个print插件,因此可以使用jQuery的方式查找元素,因此决定采用这种方式。

先看一下实现的效果图,如下:

利用jqprint插件打印页面内容的实现方法

实现效果图

引入js文件

<script type="text/javascript" src="__JS__/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="__JS__/jqprint-0.3.js"></script>

注意:这里是先引入的jQuery文件,如果没有引入第一个js文件的话,会出现兼容性问题,导致使用jqprint打印时报错。

html页面

这里面的html标签很多的

<div class="wrap-content container" id="container">
 <table border="0" cellpadding="0" cellspacing="0" class="store-joinin baseinfo">
  <thead>
   <tr>
    <th colspan="40">用户信息</th>
   </tr>
  </thead>
  <tbody>
   <tr style="background: rgb(255, 255, 255);">
    <th>姓名:</th>
    <td colspan="40">18030632605</td>
   </tr>
   <tr style="background: rgb(255, 255, 255);">
    <th>性别:</th>
    <td colspan="40">男</td>
   </tr>
   <tr style="background: rgb(255, 255, 255);">
    <th>年龄:</th>
    <td colspan="40">41</td>
   </tr>
   <tr style="background: rgb(255, 255, 255);">
    <th>身份证:</th>
    <td colspan="40">52272419770101059X</td>
   </tr>
   <tr style="background: rgb(255, 255, 255);">
    <th>所属机构:</th>
    <td colspan="40">上海市政法委</td>
   </tr>
  </tbody>
  </table>
 ......
 <button class="btn btn-danger printBtn1" onclick="btnPrintClick()" type="button">打 印</button>

当然下面还有很多的html标签,在这里就不展示了。

打印按钮点击之后执行的函数

function btnPrintClick(){
 var imgBox = $('#img_box');
 var chartBox = $('#main');
 if (imgBox.length <= 0) {
  chartBox.after('<div id="img_box"></div>');
  imgBox = $('#img_box');
 }
 // 将echart生成图片并放入img-box,并显示图片img-box
 imgBox.html('< img src="' + myChart.getDataURL() + '"/>').css('display','block');
 // 隐藏echart图chart-box
 chartBox.css('display','none');
 // 调整img大小
 var img = imgBox.find('img');
 var imgWidth = img.width();
 var showWidth = 1000; // 显示宽度,即图片缩小到的宽度
 if (imgWidth > showWidth) { // 只有当图片大了才缩小
  var imgNewHeight = img.height() / (imgWidth / showWidth);
  img.css({'width': showWidth + 'px', 'height': imgNewHeight + 'px'});
 }
 var imgBox2 = $('#img_box2');
 var chartBox2 = $('#main2');
 if (imgBox2.length <= 0) {
  chartBox2.after('<div id="img_box2"></div>');
  imgBox2 = $('#img_box2');
 }
 // 将echart生成图片并放入img-box,并显示图片img-box
 imgBox2.html('< img src="' + myChart2.getDataURL() + '"/>').css('display','block');
 // 隐藏echart图chart-box
  chartBox2.css('display','none');
 // 调整img大小
 var img2 = imgBox2.find('img');
 var img2Width = img2.width();
 var show2Width = 1000; // 显示宽度,即图片缩小到的宽度
 if (img2Width > show2Width) { // 只有当图片大了才缩小
  var img2NewHeight = img2.height() / (img2Width / show2Width);
  img2.css({'width': show2Width + 'px', 'height': img2NewHeight + 'px'});
 }
 // 打印
 $("#TestQuestions").jqprint();
 // 执行打印后再切换回来
 // 显示echart图chart-box
 chartBox.css('display','block');
 chartBox2.css('display','block');
 // 隐藏图片img-box
 imgBox.css('display','none');
 imgBox2.css('display','none');
}

注意事项:

这里使用了图片的缩放比例的方式。比如Echarts图表要显示的内容特别多的话,一般在html页面中采用的是在X轴上使用滚动条的方式,但是打印时可以将Echarts图表先转换成图片,并等比例进行缩放,打印完毕之后再还原回来即可。

任何不需要打印的标签都可以先隐藏。对于不需要出现在打印页面的标签内容,我们在打印之前使用jQuery查找到对应的元素,将该元素隐藏起来,打印结束之后,再将隐藏的元素显示出来即可。

属性

  • debug: false, //如果是true则可以显示iframe查看效果(iframe默认高和宽都很小,可以再源码中调大),默认是false
  • importCSS: true, //true表示引进原来的页面的css,默认是true。(如果是true,先会找$("link[media=print]"),若没有会去找$("link")中的css文件)
  • printContainer: true, //表示如果原来选择的对象必须被纳入打印(注意:设置为false可能会打破你的CSS规则)。
  • operaSupport: false //表示如果插件也必须支持歌opera浏览器,在这种情况下,它提供了建立一个临时的打印选项卡。默认是true

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Prototype使用指南之form.js
Jan 10 Javascript
JQuery的Alert消息框插件使用介绍
Oct 09 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
jQuery解析XML文件同时动态增加js文件的方法
Jun 01 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
快速掌握Node.js模块封装及使用
Mar 21 Javascript
JavaScript中数组的各种操作的总结(必看篇)
Feb 13 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
微信小程序中遇到的iOS兼容性问题小结
Nov 14 Javascript
微信小程序实现手势滑动卡片效果
Aug 26 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
react-router v4如何使用history控制路由跳转详解
Jan 09 #Javascript
基于vue-ssr服务端渲染入门详解
Jan 08 #Javascript
浅谈Vue2.0父子组件间事件派发机制
Jan 08 #Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 #jQuery
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 #jQuery
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
Jan 08 #Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 #jQuery
You might like
php中get_object_vars()方法用法实例
2015/02/08 PHP
php实现将Session写入数据库
2015/07/26 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
详谈Python高阶函数与函数装饰器(推荐)
2017/09/30 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
一看就懂得Python的math模块
2018/10/21 Python
pycharm实现猜数游戏
2020/12/07 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
数控专业个人求职信范例
2013/11/29 职场文书
收银员岗位职责
2014/02/07 职场文书
党性观念心得体会
2014/09/03 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
创建文明城市倡议书
2015/04/28 职场文书
Python pygame实现中国象棋单机版源码
2021/06/20 Python
python游戏开发Pygame框架
2022/04/22 Python
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers