利用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 相关文章推荐
url 特殊字符 传递参数解决方法
Jan 01 Javascript
js仿百度有啊通栏展示效果实现代码
May 28 Javascript
js实现键盘控制DIV移动的方法
Jan 10 Javascript
javascript实现倒计时(精确到秒)
Jun 26 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
Aug 21 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
详解Vue.js入门环境搭建
Mar 17 Javascript
JavaScrip数组删除特定元素的几种方法总结
Sep 06 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
JavaScript之解构赋值的理解
Jan 30 Javascript
详解babel升级到7.X采坑总结
May 12 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
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遍历文件夹与子目录的函数代码
2011/09/26 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
nodejs教程之入门
2014/11/21 NodeJs
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
js实现图片加载淡入淡出效果
2017/04/07 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
js的函数的按值传递参数(实例讲解)
2017/11/16 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
python实现画五角星和螺旋线的示例
2019/01/20 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
工商管理专业应届生求职信
2013/11/04 职场文书
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
《社戏》教学反思
2014/04/15 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
个人股份合作协议书
2014/10/24 职场文书
学历证明范文
2015/06/16 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android