说明

在VUE下如果需要打印表单之类的,我们可以使用window.print() 方法进行打印,但是VUE的页面是单页面应用,所以他打印的话是打印的整个窗口。

解决办法

将需要打印的页面独立成一个页面,然后访问打印页面的时候,直接去访问打印页面。

页面打印的代码如下:

打印的HTML:

<div slot="toolheader" class="noprint" border="true" foldheader="true" foldbtn="false" align="right">
        <div style="padding-top:16px;padding-right: 16px;padding-bottom: 16px;">
          <a-button type="primary" id="btnPrint" >打印</a-button>
        </div>
      </div>
      <div class="fitContainer">
        <div class="contents">
          <div class="fitContentBox" ref="printArea">

            <bpm-inst-info :bpmInst="bpmInst" />

            <rx-forms ref="rxForms" v-if="formType=='online'"> </rx-forms>
            <component ref="customForm" :is="formComponent" :pk="pk" v-else></component>
          </div>
        </div>
      </div>

点击打印调用的代码:

print(){
    var self_=this;
    //先获取当前body的内容
    var bodyHtml=window.document.body.innerHTML;
    //获取打印区域的内容
    var printHtml=this.$refs[this.printArea].innerHTML;
    //将body的内容进行替换
    window.document.body.innerHTML=printHtml;
    //执行打印。
    window.print();
    setTimeout(function () {
        //恢复之前的打印内容
        window.document.body.innerHTML=bodyHtml;
        //之前的vue的打印点击事件失效,这里进行重新进行绑定。
        document.getElementById(self_.btnPrint).addEventListener("click",function () {
            self_.print();
        })
    },1000)
}
文档更新时间: 2021-04-06 14:55   作者:zyg