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 相关文章推荐
JQuery异步加载无限下拉框级联功能实现示例
Feb 19 Javascript
Node.js模块加载详解
Aug 16 Javascript
node.js中的fs.truncateSync方法使用说明
Dec 15 Javascript
jQuery判断元素上是否绑定了指定事件的方法
Mar 17 Javascript
jQuery实现的网页左侧在线客服效果代码
Oct 23 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
Jul 20 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
js中async函数结合promise的小案例浅析
Apr 14 Javascript
JS中的继承操作实例总结
Jun 06 Javascript
JS实现页面侧边栏效果探究
Jan 08 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把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
关于PHP开发的9条建议
2015/07/27 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
vue axios同步请求解决方案
2017/09/29 Javascript
vue-cli webpack 引入jquery的方法
2018/01/10 jQuery
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
在Django框架中编写Context处理器的方法
2015/07/20 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python递归函数实例讲解
2019/02/27 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
最新销售员个人自荐信
2013/09/21 职场文书
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
2014年质检工作总结
2014/11/26 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
2016年离婚协议书范文
2016/03/18 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
MySQL的安装与配置详细教程
2021/06/26 MySQL