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 相关文章推荐
仿163填写邮件地址自动显示下拉(无优化)
Nov 05 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
jQuery filter函数使用方法
May 19 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
js获取当前日期时间及其它日期操作汇总
Mar 08 Javascript
javascript关于继承解析
May 10 Javascript
深入理解Vue 单向数据流的原理
Nov 09 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
Sep 26 Javascript
javascript刷新父页面方法汇总详解
Oct 10 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
May 12 Javascript
vue-cli中实现响应式布局的方法
Mar 02 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在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
javascript 类型判断代码分析
2010/03/28 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
纯JS实现表单验证实例
2016/12/24 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Angular4表单验证代码详解
2017/09/03 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
Python实现的批量下载RFC文档
2015/03/10 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
python多进程读图提取特征存npy
2019/05/21 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
网络书店创业计划书
2014/02/07 职场文书
施工安全汇报材料
2014/08/17 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
2015年保洁工作总结范文
2015/04/28 职场文书