【前端】三种方法实现HTML页面局部打印(ctrl+p效果)效果

简介: 【前端】三种方法实现HTML页面局部打印(ctrl+p效果)效果

前言

在开发中,有时需要实现页面的局部打印功能,不打印页面上不需要的区域,

例如页面:


<div>内容1</div>

<div>内容2</div>

<div>内容3</div>

<div id="toPrint" style="color:red">打印内容</div>

<button  onclick="print()"> doPrint </button>

</body>

如果我们仅仅需要打印"打印内容",三种实现方法如下:

方法一、替换body

代码:

<script type="text/javascript">
    function print(){
    
        var bdhtml = window.document.body.innerHTML;
        
        var prnhtml = $("#toPrint").html();
        
        window.document.body.innerHTML = prnhtml;
        
        window.print();
        
        window.document.body.innerHTML = bdhtml;

    };
</script>

因为window.print()这个方法只能打印全部body内容,所以这个方法大体来讲,分四个步骤:

1.获取原有body里面的所有内容

var bdhtml = window.document.body.innerHTML

2.获取待打印内容

var prnhtml = document.getElementById(“toPrint”);

3.将页面body替换为待打印内容并进行打印

window.document.body.innerHTML = prnhtml;
window.print();

4.打印完成,恢复原来页面body

window.document.body.innerHTML = bdhtml;

总结:

  • 优点:
    这个方法不依赖于任何第三方插件,响应速度快
  • 缺点:
    1、替换过程会改变原页面显示效果,影响用户体验。
    2、body来回替换的过程中,如果原页面中有较为复杂的js渲染效果,可能会受影响

方法二:jquery.PrintArea.js局部打印 步骤:

步骤

1.下载jquery.PrintArea.js

jquery.PrintArea.js下载地址:点击下载

2.引入jq ,引入jquery.PrintArea.js(注意顺序问题)

因为PrintArea依赖于jquery库,所以一定先引jquery。

<script language="javascript" src="jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="jquery.PrintArea.js"></script>

4.html部分:

<div id="printShow">
    
  //要打印的区域
 
</div>

<input type="button" id="printBtn"/>

5.js

$("#printBtn").click(function(){ 
        $(".printShow").printArea(); 
}); 

总结:

  • 缺点:
    依赖于第三方插件
  • 优点:
    对原页面不会有任何影响,并且逻辑简单。

ps: PrintArea还提供一些打印时的附加优化功能,例如:

1.mode:模式,当点击打印按钮时触发模式,默认为iframe,当设置为popup则会新开一个窗口页面打印。

2.popTitle:设置新开窗口的标题,默认为空。 3.popClose:完成打印后是否关闭窗口,默认为false。 具体可参考官方API

方法三、css控制

如果不想用上面介绍的jq的那个插件,那直接简单粗暴的用css控制打印的样式吧

代码

@media print {
  //这里是打印的样式,将不需要打印出来的盒子直接用display:none;隐藏就好了。
}

或者用link引入,后面加 media="print"属性打印样式就用这里面的css控制了。

打印可能碰到的的问题:

table表格打印,一页没放下,内容要到第二页去,不作处理会出现这种情况。

解决办法:

@media print {
  td,tr{ page-break-inside: avoid;}   
   //用于设置是否在指定元素中插入分页,avoid 避免在元素内部插入分页符。
}

想让特定的某个div在新的一页

<button onclick="printFun()">打印</button>
<div style="page-break-after:always">我是封面</div>
<div style="page-break-after:always">我是目录,你不知道我的内容有多长</div>
<div>我是正文,我需要从一个新页面开始展示</div>
<script>
  function printFun() {
        window.print();
    }    
</script>

这样,封面,目录和正文分别在打印预览的下一页了。

page-break-after:always; //设置在表格元素之后始终进行分页的分页行为:

page-break-after:avoid; //避免在元素后插入分页符

page-break-before 和page-break-after一样的用法, 元素在指定元素前添加分页符。


参考

https://blog.csdn.net/guo_2019/article/details/106049769

https://cloud.tencent.com/developer/article/1927132

目录
相关文章
|
17天前
|
前端开发 数据安全/隐私保护
.自定义认证前端页面
.自定义认证前端页面
8 1
.自定义认证前端页面
|
4天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
13 5
|
12天前
html页面点击按钮实现页面跳转功能
html页面点击按钮实现页面跳转
|
12天前
|
前端开发 安全 JavaScript
在阿里云快速启动Appsmith搭建前端页面
本文介绍了Appsmith的基本信息,并通过阿里云计算巢完成了Appsmith的快速部署,使用者不需要自己下载代码,不需要自己安装复杂的依赖,不需要了解底层技术,只需要在控制台图形界面点击几下鼠标就可以快速部署并启动Appsmith,非技术同学也能轻松搞定。
|
1月前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
38 18
|
21天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
40 2
|
29天前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
5天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
21 0
|
1月前
|
XML 前端开发 JavaScript
前端开发进阶:从HTML到React.js
【10月更文挑战第9天】前端开发进阶:从HTML到React.js
|
1月前
|
移动开发 HTML5
一个最简单的 HTML 页面结构如下:
HTML 是一种标记语言,用于描述网页结构。通过 `&lt;html&gt;`, `&lt;head&gt;`, `&lt;body&gt;` 等标签构建页面,支持文本、图像、链接、表格等多种元素。本文介绍了 HTML 基础,包括常用标签及创建简单网页的实例,帮助初学者快速入门。
60 0