JS实现页面打印(整体、局部)


Posted in Javascript onAugust 18, 2017

我们在网页开发过程中经常会有打印页面的需求,通过JS来实现的方法有很多,这里我做了一个整理,供大家参考。

方式一:window.print()

整体打印

<a href="javascrīpt:window.print()" rel="external nofollow" target="_self">打印</a>

现在就轻松实现了页面的打印,但是这种方式会将整个页面打印,如果想要实现指定区域的打印需要通过下面的设置

局部打印

首先,在html中,通过star和end来标记打印区域

<h1>这块内容不需要打印</h1>
<!--startprint-->
<div class="content">
  这里是需要打印的内容
    .....
</div>
<!--endprint-->
<h1>这块内容不需要打印</h1>

然后,在点击事件中添加如下代码

function doPrint() {   
    bdhtml=window.document.body.innerHTML;   
    sprnstr="<!--startprint-->";   
    eprnstr="<!--endprint-->";   
    prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);   
    prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));   
    window.document.body.innerHTML=prnhtml;  
    window.print();   
}

过滤打印区域的内容

例如

<!--startprint-->
<div class="content">
  <button class="noprint">预览</button>
  <button class="noprint">打印</button>
   这里是需要打印的内容
    .....
  </div>
<!--endprint-->

上面的预览和打印按钮不希望打印,如果要过滤的话可以做下面的样式设置

<style type="text/css">
      @media print {
        .noprint{
          display: none;
        }
      }
    </style>

or

<style type="text/css" media="print">
      .noprint{
        display: none;
      }
    </style>

两种写法任选其一

分页打印

使用 window.print() 打印时,如果内容超出会自动分页。但是我们如果需要自定义分页范围,如碰到表格分页打印,可以通过进行如下设置:

<table width="100%" border="0" cellpadding="0" cellspacing="0" style="page-break-after:always" > 
</table>

方式二、jqprint()

jqprint是一个基于jQuery编写的页面打印的一个小插件,但是不得不承认这个插件确实很厉害,最近的项目中帮了我的大忙,在Web打印的方面,前端的打印基本是靠window.print()的方式进行打印的,而这个插件在其基础上进行了进一步的封装,可以轻松实现打印网页上的某个区域,这是个亮点。

参考网址:https://3water.com/article/102230.htm

请注意!很多朋友遇到 Cannot read property 'opera' of undefined 错误问题是juqery版本兼容问题

解决方法:加入迁移辅助插件 jquery-migrate-1.0.0.js可解决版本问题

引入

<script language="javascript" src="jquery-1.4.4.min.js"></script>
<script language="javascript" src="jquery.jqprint-0.3.js"></script>

js

<script language="javascript">
function a(){
    $("#ddd").jqprint();
  }
</script>

html

<div id="ddd">
  <table>
    <tr>
      <td>test</td>
      <td>test</td>
      <td>test</td>
      <td>test</td>
      <td>test</td>
    </tr>
  </table>
</div>
<input type="button" onclick=" a()" value="打印"/>

设置模板打印

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

附言

另外还可以使用html 标签<object>引入Webbrowser控件(只兼容IE)或者调用windows底层打印,报安全警告,不建议使用(不支持局部打印)

这里只介绍两种方式,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
Apr 24 Javascript
七个很有意思的PHP函数
May 12 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
Javascript的比较汇总
Jul 25 Javascript
canvas实现探照灯效果
Feb 07 Javascript
angular框架实现全选与单选chekbox的自定义
Jul 06 Javascript
Vue实现底部侧边工具栏的实例代码
Sep 03 Javascript
JavaScript实现shuffle数组洗牌操作示例
Jan 03 Javascript
微信小程序渲染性能调优小结
Jul 30 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
简单实现jQuery轮播效果
Aug 18 #jQuery
JavaScript编写的网页小游戏,很给力
Aug 18 #Javascript
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 #Javascript
基于 Vue 的树形选择组件的示例代码
Aug 18 #Javascript
简单实现jQuery手风琴效果
Aug 18 #jQuery
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 #Javascript
JavaScript实现旋转轮播图
Aug 18 #Javascript
You might like
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php中session使用示例
2014/03/29 PHP
PHP实现删除非站内外部链接实例代码
2014/06/17 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
jQuery 处理表单元素的代码
2010/02/15 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
Bootstrap modal 多弹窗之叠加关闭阴影遮罩问题的解决方法
2017/02/27 Javascript
VSCode 配置React Native开发环境的方法
2017/12/27 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
python实现装饰器、描述符
2018/02/28 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
2019/06/04 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
就业自我评价
2014/02/04 职场文书
优质服务演讲稿
2014/05/14 职场文书
车间安全生产标语
2014/06/06 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
学校三八妇女节活动总结
2015/02/06 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
flex弹性布局详解
2022/03/20 HTML / CSS
golang实现浏览器导出excel文件功能
2022/03/25 Golang
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android
Java 数组的使用
2022/05/11 Java/Android