时间:2021-05-26
前言
近期着手项目任务的打印功能,在此作个记录,本文介绍基于React的一种调用浏览器打印页面指定内容的方法。
整体思路: 通过构建一个隐藏的元素(该元素包裹需打印的内容),当打印行为触发时,将页面其他的一些不需要打印的元素隐藏,然后将需打印的元素追加到body中,打印完成后,再恢复初始状态即可。浏览器打印的本质还是将web页面中的元素打印出来而已。
1. 构建待打印元素
在页面中构建一个display为none的元素,里面的内容为你需要打印的内容。我们还需要设置包裹打印内容的元素的ref属性,以便于后面获取到元素。
<div style={{ display: 'none' }}> <div ref={el => (this.printRef = el)}> { 打印内容 } </div></div>2. 打印动作触发时的处理
处理流程:
对应的CSS设置:
@page { size: A4; margin: 0;}@media print { html, body { min-width: 0; width: 210mm; height: 297mm; } .print-hide { visibility: hidden!important; display: none!important; }}其中,@page中的size可以自己设置纸张的大小,如果是A4纸可以直接设置值为A4,媒体查询@media print中设置的是打印时的样式,因为打印设备知道其输出区域的物理大小,所以使用厘米(cm)、毫米(mm)、英寸(in)等作为打印设计的单位完全可行。
补充(其他原生的打印方法)
直接替换body的内容为要打印的内容,之后再重新刷新页面。
打开一个新窗口,将打印内容放到新窗口打印,打印结束后关闭新窗口
以上两种方法可能会造成CSS样式应用无效的问题。
3. 注意点
第二小节的步骤2中的意思是:将页面中所有不需要打印的元素隐藏,特别注意像模态窗Model这些元素,也要为它们加上 'print-hide'className属性。
如果需要在特定位置强制分页打印,可以尝试在对应元素上设置page-break-before:always !important、page-break-after:always !importantCSS属性,该属性只对块级元素有效。
进入打印预览后,我们无法获知用户最终是选择了打印,还是选择了取消。这里若有人知道解决方法的话,欢迎留言。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
如果某个电子表格中的内容不要全部打印,只要打印连续的部分内容,那么如何来实现这种功能呢?下面就为大家详细介绍一下,来看看吧!软件名称:excel2003分析工具
本文主要讲解Android浏览器的开发实例,有三部分内容:启动Android默认浏览器、指定浏览器进行访问以及打开本地的html文件。一、启动Android默认
本文主要讲解Android浏览器的开发实例,有三部分内容:启动Android默认浏览器、指定浏览器进行访问以及打开本地的html文件。一、启动Android默认
在获取富文本后,又只要显示部分内容,需要去除富文本标签,然后再截取其中一部分内容;然后就是过滤器,在微信小程序中使用还是挺多次的,在vue及react中也遇到过
如果某个电子表格中的内容不要全部打印,只要打印连续的部分内容,那么如何来实现这种功能呢?下面就为大家详细介绍一下,来看看吧! 步骤 准备原始数据,本文还