问题:
使用vue-print-nb打印,当数据很多时,打印预览显示不全。
原因:
首先,为了使打印按钮始终固定显示在页面上部,对id=”print”所在的div的高度进行了计算,使其正好布满剩余屏幕高度。
v-html引用的datas是从后端请求来的,由于数据很多,超出了一屏,且其父容器id=”print”设置了:overflow-y:auto;,使id=”print”容器出现了滚动条。
结果,点击打印按钮进行预览时,显示不全,后面的内容没有显示出来。
原理:
通过阅读vue-print-nb的源码,了解到vue-print-nb获取Id=”print”的内容,然后将这些内容放在了vue-print-nb新建的iframe的body标签中,同时将Id=”print”中的样式放在新建的iframe的style标签中。然后经过各种转换、兼容,最终调用原生window.print()执行打印。
解决方法:
1、将vue项目node-modules中的vue-print-nb/print文件夹下的所有内容拷贝出来,放到项目中。我这里是放到了src/assets/vue-print-nb目录下。
2、修改拷贝的源码printarea.js中getBody()返回的body。添加样式:style="height:auto"。3、修改main.js中的引用。
解决。
遗留问题:
打印预览的最底部出现空白页,一般是由于margin引起的。
因此,保证打印内容的margin-top和margin-bottom为0即可。
我设置了v-html所在的margin。