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 相关文章推荐
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
Mar 25 Javascript
JavaScript数据结构与算法之链表
Jan 29 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
JS冒泡事件与事件捕获实例详解
Nov 25 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
VUE基于NUXT的SSR 服务端渲染
Nov 30 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
Jul 25 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 Javascript
Vue+Flask实现图片传输功能
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
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
用PHP实现的随机广告显示代码
2007/06/14 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
jQuery中animate()方法用法实例
2014/12/24 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
在vscode里使用.vue代码模板的方法
2018/04/28 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
浅谈小程序globalData的那些事儿
2019/11/01 Javascript
Python中is与==判断的区别
2017/03/28 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python 线程的五个状态
2020/09/22 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
英国标志性奢侈品牌:Burberry
2016/07/28 全球购物
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
会计毕业生自荐信
2013/11/21 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
信用社竞聘演讲稿
2014/05/16 职场文书
档案信息化建设方案
2014/05/16 职场文书
党员个人对照检查材料思想汇报
2014/09/16 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
专业见习报告范文
2014/11/03 职场文书
学生通报表扬范文
2015/05/04 职场文书
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android