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 网易相册鼠标移动显示隐藏效果实现代码
Mar 31 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
JS delegate与live浅析
Dec 21 Javascript
利用浏览器全屏api实现js全屏
Jan 16 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
Jan 23 Javascript
Node连接mysql数据库方法介绍
Feb 07 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
使用Node.js实现一个多人游戏服务器引擎
Mar 13 Javascript
Vue中的this.$options.data()和this.$data用法说明
Jul 26 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
PHP ? EasyUI DataGrid 资料存的方式介绍
2012/11/07 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
归纳下js面向对象的几种常见写法总结
2016/08/24 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
详解微信小程序获取当前时间及日期的方法
2019/04/28 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
python3库numpy数组属性的查看方法
2018/04/17 Python
Python实现转换图片背景颜色代码
2020/04/30 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
介绍一下gcc特性
2015/10/31 面试题
公司年会演讲稿范文
2014/01/11 职场文书
精彩自我鉴定
2014/01/16 职场文书
倡议书范文
2014/04/16 职场文书
物业管理工作方案
2014/05/10 职场文书
洗手间标语
2014/06/23 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
教师节主题班会方案
2015/08/17 职场文书
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Python极值整数的边界探讨分析
2021/09/15 Python
MySQL创建管理子分区
2022/04/13 MySQL
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技