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 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
Oct 24 Javascript
js下拉菜单语言选项简单实现
Sep 23 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
javascript常用函数(2)
Nov 05 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
Aug 24 Javascript
Angular 项目实现国际化的方法
Jan 08 Javascript
mpvue 如何使用腾讯视频插件的方法
Jul 16 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
Sep 23 Javascript
JS轮播图的实现方法
Aug 24 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
简单实现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
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP中文竖排转换实现方法
2015/10/23 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
2014/11/23 Javascript
js面向对象之公有、私有、静态属性和方法详解
2015/04/17 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python元组知识点总结
2019/02/18 Python
Python使用sklearn实现的各种回归算法示例
2019/07/04 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
工作态度检讨书
2014/02/11 职场文书
五好关工委申报材料
2014/05/31 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
golang中的空slice案例
2021/04/27 Golang
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python