Vue导出页面为word

由于导出word时,页面样式无法正常使用,因此整体页面采用table布局,仅在几个地方添加style样式,没有其余样式
		  /**
			* 当页面中有canvas时,我的做法是
			* 在页面中预先放置一个src为空的img标签
			* 点击导出时,将canvas转为base64,将之前设置的img标签的src修改为base64,同时置空canvas
			* 需要注意的是,这种情况下,当结束导出操作时,由于页面中的canvas已经替换为图片,进行获取canvas标签操作时会报错
			* 因此需要进行判断
			* 当页面中存在canvas标签时,进行转换canvas操作
			* 否则直接导出页面内容
			*/
		  var cv = document.getElementsByTagName("canvas")[0]; //获取canvas
     	  var resImg = document.getElementsByClassName("resImg")[0]; //获取包裹canvas的标签
     	  var cimg = document.getElementsByClassName("cimg")[0];//获取空src的img标签
      	  // 将canvas转为图片
      	  var context = cv.getContext("2d");
      	  var srcDataURL = cv.toDataURL("image/png");
          cimg.setAttribute("src",srcDataURL);
          resImg.innerHTML = "";
          let tableConts =document.getElementsByClassName("tablepart")[0].innerHTML;// 获取要导出部分的内容
          
         
          // 将内容补完为完整的html页面
          let html_ = `<!DOCTYPE html>
                <html>
                <head>
                    <meta charset="utf-8">
                    <meta name="viewport" content="width=device-width,initial-scale=1.0">
                    <link rel="stylesheet" href="https://cdn.bootcss.com/iview/2.14.0/styles/iview.css" />
                    <style>
                    </style>
                </head>
                <body>
                    <div class="resume_preview_page" style="margin:0 auto;width:1200px">
                   ${tableConts}
                    </div>
                </body>
                </html>`;
    		// 将html页面发送至后台进行处理
            this.$axios({
              method: "post",
              data: html_,
              headers: {
              // 后台要求设置为json,使用时依据后台情况决定
                "Content-Type": "application/json"
              },

              responseType: "blob", //这里如果不设置,下载会打不开文件
              url: "http://192.168.0.125:9006/adminQuestion/exportWord"
            })
            .then(res => {
              //通过后台返回 的word文件流设置文件名并下载
              var blob = new Blob([res.data], {
                type:
                  "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8"
              }); //application/vnd.openxmlformats-officedocument.wordprocessingml.document这里表示doc类型
              console.log(blob);
              var downloadElement = document.createElement("a");
              var href = window.URL.createObjectURL(blob); //创建下载的链接
              downloadElement.href = href;
              downloadElement.download = "a.doc"; //下载后文件名
              document.body.appendChild(downloadElement);
              downloadElement.click(); //点击下载
              document.body.removeChild(downloadElement); //下载完成移除元素
              window.URL.revokeObjectURL(href); //释放掉blob对象
            })
            .catch(err => {
              console.log(err);
            });

引用

vue导出html、word和pdf

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
要将Vue页面导出Word文档,可以使用JavaScript和Blob对象来实现。以下是一种可能的方法: 1. 首先,你需要将Vue页面渲染为HTML。可以使用Vue的$el属性来获取Vue实例的根元素,然后使用innerHTML属性获取其HTML内容。 2. 然后,你需要创建一个Blob对象,将HTML内容作为其参数。Blob对象可以将数据转换为二进制数据并保存为文件。 3. 最后,你需要创建一个链接,将Blob对象的URL作为其href属性。用户可以点击链接下载Word文档。 以下是一个简单的示例代码: ```javascript function exportToWord() { // 获取Vue页面的HTML内容 var html = document.querySelector('#app').innerHTML; // 创建Blob对象 var blob = new Blob(['\ufeff', html], { type: 'application/msword' }); // 创建链接 var url = URL.createObjectURL(blob); var link = document.createElement('a'); link.href = url; link.download = 'document.doc'; document.body.appendChild(link); // 下载文件 link.click(); // 清理 document.body.removeChild(link); URL.revokeObjectURL(url); } ``` 在这个示例中,我们将Blob对象的类型设置为“application/msword”,这将告诉浏览器将其保存为Word文档。你还可以更改文件名和文件类型,以适应你的需求。 请注意,如果你的Vue页面包含动态内容,例如从API获取的数据或用户交互生成的内容,你需要在导出之前确保这些内容已经被渲染到页面中。可以使用Vue的$nextTick方法来确保Vue实例已经更新完毕。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值