VUE项目截图页面导出PDF

VUE项目截图页面导出PDF

首先我也是去百度了一下方法,来自这个老哥的文章
VUE中将页面导出为图片或者PDF
但是一顿操作之后就遇到了另一个问题
如何在Vue中获取想要的dom元素
便了解了一下方法,首先想获取被vue渲染过的原生dom元素,必须得等页面全部加载完毕
首先我们要先定义一个ref如

<div ref="xxx"></div>

随后有两个方式
因此一个方式是在mounted方法中直接获取,即加载页面后直接执行,赋值到我们自己的边梁上

mounted(){
 this.pdfDiv = this.$refs.xxx
},

另一个便是绑定到按钮上确保页面已经加载完毕

然后到处pdf套用上面链接里老哥的方法就好了
先在vue项目中执行

  • npm install html2canvas --save
  • npm install jspdf --save
    为了方便复制一个我的代码在这里
import html2canvas from 'html2canvas'
import JsPDF from 'jspdf'
methods:{
exportPDF(name) { //导出pdf
        // let shareContent = document.body,//需要截图的包裹的(原生的)DOM 对象
        let shareContent = this.$refs.xxx,
          // width = shareContent.clientWidth, //获取dom 宽度
          // height = shareContent.clientHeight, //获取dom 高度
          width = shareContent.offsetWidth, //获取dom 宽度
          height = shareContent.offsetHeight, //获取dom 高度
          canvas = document.createElement("canvas"), //创建一个canvas节点
          scale = 1; //定义任意放大倍数 支持小数
        canvas.width = width * scale; //定义canvas 宽度 * 缩放
        canvas.height = height * scale; //定义canvas高度 *缩放
        canvas.style.width = shareContent.clientWidth * scale + "px";
        canvas.style.height = shareContent.clientHeight * scale + "px";
        canvas.getContext("2d").scale(scale, scale); //获取context,设置scale
        let opts = {
          scale: scale, // 添加的scale 参数
          canvas: canvas, //自定义 canvas
          logging: false, //日志开关,便于查看html2canvas的内部执行流程
          width: width, //dom 原始宽度
          height: height,
          useCORS: true, // 【重要】开启跨域配置
        }
        html2canvas(shareContent, opts).then(() => {
          var contentWidth = canvas.width;
          var contentHeight = canvas.height;
          //一页pdf显示html页面生成的canvas高度;
          // var pageHeight = (contentWidth / 592.28) * 841.89;
          var pageHeight = (contentWidth / 592.28) * 841.89;
          //未生成pdf的html页面高度
          var leftHeight = contentHeight;
          //页面偏移
          var position = 0;
          //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
          var imgWidth = 595.28;
          var imgHeight = (592.28 / contentWidth) * contentHeight;
          var pageData = canvas.toDataURL("image/jpeg", 1.0);
          var PDF = new JsPDF("", "pt", "a4");
          if (leftHeight < pageHeight) {
              PDF.addImage(pageData, "JPEG", 0, 0, imgWidth, imgHeight);
          } else {
            while (leftHeight > 0) {
              PDF.addImage(pageData, "JPEG", 0, position, imgWidth, imgHeight);
              leftHeight -= pageHeight;
              position -= 841.89;
              if (leftHeight > 0) {
                  PDF.addPage();
              }
            }
          }
          name = "测试"
          PDF.save(name + ".pdf"); // 这里是导出的文件名
        });
      },
   }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值