Vue项目里的页面打印

功能描述,在项目里有个打印功能,将页面的部分内容打印出来。
如图描述只打印画圈的部分
(内容未展开)
在这里插入图片描述
实际打印效果:
在这里插入图片描述
在这里插入图片描述

如果直接用 window.print();只能打印一屏的内容,内容不能分页;所以只能操作节点

具体代码:

//打印方法
dayin(){
let dataReportBox =  document.getElementById('dataReportBox');//获取要打印内容的节点
//取不显示的节点,可以将他隐藏或者移除该节点
let top = document.getElementsByClassName('top')[0];
dataReportBox.removeChild(top);

//创建自己需要的节点
let topdiv = `<div class="topdiv"><span class="title">防火单位智慧消防数据综合报告</span><span class="time">${this.infos.beginDate}至${this.infos.endDate}</span></div>`;
$('#dataReportBox').prepend(topdiv); //将新创建的div节点插入到dataReportBox容器的内容顶部

let printHtml = document.getElementById('dataReportBox').innerHTML//获取到要打印的节点内容
window.document.body.innerHTML = printHtml;//把打印内容赋值给页面内容

window.print();//调用打印方法
window.location.reload();//打印之后页面重新加载
  }

注意:打印出来的样式和页面样式不同,没有保留页面的样式。
在这里插入图片描述

//注意这样重新编辑排版了的打印页面,原来的css不会显示的
//这个是在style里可以编辑打印时候的样式
@media print{
	
}

附加:
如果内容里存在canvas 是不能打印出来的,需要将canvas转换为image
实现:
获取到相对应的canvas节点然后转换为image对象

 print(){
          let diaBody =  document.getElementById('diaBody');
          let top = document.getElementsByClassName('top')[0];
            
          diaBody.removeChild(top);//删除节点

         
          let nodeArr = [];//存放节点

          $('.echarts').each(function (letter, rows) { //将canvas节点转换为image对象
            let  image = new Image();
            let canvasnode  = rows.children[0].children[0]
            image.width = 800;
            image.src = canvasnode.toDataURL("image/png");
            nodeArr.push(image)
          })
         
          $('.echarts').each(function (letter, rows) { //删除之前的canvas节点
            let children = rows.children[0];
            rows.removeChild(children);//移除canvas节点
          })
          $('.echarts').each(function (letter, rows) { //将canvas节点转换为image对象拼接在节点里
              rows.appendChild(nodeArr[letter])
          })
          let printHtml = document.getElementById('diaBody').innerHTML
          window.document.body.innerHTML = printHtml;
          setTimeout(()=>{
            window.print();
            window.location.reload();
          })
          
      }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值