利用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 相关文章推荐
简明json介绍
Sep 28 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
jQuery实现弹出窗口中切换登录与注册表单
Jun 05 Javascript
Javascript 高阶函数使用介绍
Jun 15 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
Mar 09 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
Jan 11 Javascript
使用RN Animated做一个“添加购物车”动画的方法
Sep 12 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
Dec 14 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
Jun 25 Javascript
vue自动添加浏览器兼容前后缀操作
Aug 13 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
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
PHP实现的一致性哈希算法完整实例
2015/11/14 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python微信公众号开发简单流程
2018/03/23 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
软件测试有哪些?什么是配置项?
2012/02/12 面试题
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
群众路线领导对照材料
2014/08/23 职场文书
2014年教师党员自我评价范文
2014/09/22 职场文书
2014年党务工作总结
2014/11/25 职场文书
中学生自我评价范文
2015/03/03 职场文书
2015年农村党员公开承诺事项
2015/04/28 职场文书
2016党员党课心得体会
2016/01/07 职场文书
在Docker容器中部署SQL Server
2022/04/11 Servers