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中substr,substring,slice.splice的区别说明
Nov 25 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
Apr 02 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
js弹出对话框方式小结
Nov 17 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
Dec 29 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
Feb 12 Javascript
基于iScroll实现内容滚动效果
Mar 21 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
Dec 13 Javascript
Koa从零搭建到Api实现项目的搭建方法
Jul 30 Javascript
JavaScript实现HTML导航栏下拉菜单
Nov 25 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP 模拟$_PUT实现代码
2010/03/15 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
2021/01/19 Javascript
uwsgi+nginx部署Django项目操作示例
2018/12/04 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
浅谈Pytorch torch.optim优化器个性化的使用
2020/02/20 Python
如何启动时不需输入用户名与密码
2014/05/09 面试题
大学教师年终总结的自我评价
2013/10/29 职场文书
中学门卫岗位职责
2013/12/26 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
初中毕业感言300字
2015/07/31 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers