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 相关文章推荐
js取滚动条的尺寸的函数代码
Nov 30 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
Aug 05 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
Jul 27 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
通过button将form表单的数据提交到action层的实例
Sep 08 Javascript
JS实现滑动导航效果
Jan 14 Javascript
详解JavaScript作用域 闭包
Jul 29 Javascript
JavaScript与JQuery框架基础入门教程
Jul 15 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
实现PHP搜索加分页
2016/10/12 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
Python中Class类用法实例分析
2015/11/12 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
幼师自荐信
2013/10/26 职场文书
绿色小区申报材料
2014/08/22 职场文书
单身申明具结书
2015/02/26 职场文书
电影地道战观后感
2015/06/04 职场文书
致青春观后感
2015/06/09 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android