react控制打印机打印_React实现浏览器打印指定内容

近期着手项目任务的打印功能,在此作个记录,本文介绍基于React的一种调用浏览器打印页面指定内容的方法。

整体思路:通过构建一个隐藏的元素(该元素包裹需打印的内容),当打印行为触发时,将页面其他的一些不需要打印的元素隐藏,然后将需打印的元素追加到body中,打印完成后,再恢复初始状态即可。浏览器打印的本质还是将web页面中的元素打印出来而已。

1. 构建待打印元素

在页面中构建一个 display为none

的元素,里面的内容为你需要打印的内容。我们还需要设置包裹打印内容的元素的 ref属性

,以便于后面获取到元素。

(this.printRef = el)}>

{ 打印内容 }

复制代码

2. 打印动作触发时的处理

处理流程:

获取待打印元素;

将根元素隐藏;

将待打印元素追加到body中;

调用浏览器的打印预览;

预览界面关闭后,将待打印元素从body中移除,将原始页面恢复。

let printView = this.state.printRef //获取待打印元素

document.querySelector('#root').className = 'print-hide' //将根元素隐藏

document.body.appendChild(printView) //将待打印元素追加到body中

window.print() //调用浏览器的打印预览

document.body.removeChild(printView) //将待打印元素从body中移除

document.querySelector('#root').className = '' //将原始页面恢复

复制代码

对应的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)等作为打印设计的单位完全可行。

注意:本文来自稀土掘金。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!

CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。

你可能感兴趣的:(react控制打印机打印)