由于业务需要打印业务,所以查询了一些资料,总结一下打印的一些方法。
1.调用window.print打印
window.print打印会调用当前页面,业务需求是打印当前页面的其中的几块区域,所以不是很符合业务要求,也不是没有处理方法(个人想法,未实践)。
调节不需要的模块进行隐藏,然后调用window.print打印,打印或取消结束时恢复原来的样式。个人认为该方法真不是一个好方法,首先会操作DOM,显然会导致消耗过大,没有必要;其次,如果样式过于复杂的情况下,其实控制其余元素的显隐是一个麻烦的事情,并不有利于整体结构的控制,可读性不高,维护起来也恶心。记录下来的原因只是为了开拓思路。(强烈不推荐)
2.利用插件react-to-print
这个插件可以打印页面中的某一部分,也可以利用一个显隐的模块专门去记录需要打印的内容,具体的可参考官方文档。react-to-print – npm里面有详细的例子与介绍。
3.使用iframe的方式解决
其实前面的方法会有一些bug,会导致页面内容发生紊乱,不得不利用window.location.reload重新加载,消耗挺大。由于我的业务中的内容是发生变化的,所以获取当前的页面的DOM更有利于业务需求,而且我的业务需求需要打印一块区域,而不是其中某一个区域,是否有一种方式可以通过获取DOM,将这些模块合成一个整体。如果重新写一个模块专门去打印,代码的复用性确实不太高,主要是代码太过于复杂不利于拆分,所以想找一个比较好一点的思路来更好的适用于业务需求。参考资料react + antd 实现打印功能(踩了不少坑) – 纸鸢&红豆·绿豆 – 博客园