赞
踩
这是对之前导出插件的一个原理的再次实现~
我们要利用Blob对象和FilerSaver
Blob是什么?
一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。
Blob有两个参数
参数1:数据序列,可以是任意格式的值,这里必须以数组的形式传递进去
参数2:一个对象其中有两个属性{ type: MIME的类型, endings: 决定第一个参数的数据格式,
可以取值为 “transparent” 或者 “native”(transparent的话不变,是默认值,native 的话
按操作系统转换) 。 }
例:let blob01 = new Blob( [JSON.stringify(str,null,2)], {type:"application/json"});
FileSaver是npm中可以下载的一个包,用比特流来存储大的文件,或者是保存下载文件
1.安装
npm install file-saver --save
2、在Vue或者React中引入
import FileSaver from 'file-saver';
3、准备导出模板
我们可以给Blob的对象传入一个html的模板,导出的word便会根据我们的html代码进行渲染并呈现出来
/*两个参数:mhtml为你传递进来的html代码,style即是html的对应样式*/ function getModelHtml(mhtml,style = ""){ return ` Content-Type: text/html; charset="utf-8" <!DOCTYPE html> <html> <head> <style> ${style} </style> </head> <body> ${mhtml} </body> </html> ` }
4.创建Blob对象并调用File.saveAs()
(1)准备好我们的html代码
let node = "<div class='a'>你好你好</div>";
let style = ".a{font-size:80px;color:'red'}"
(2)使用我们刚刚准备好的html模板并创建Blob对象
let html = this.getModelHtml(node,style)
let blob = new Blob([html],{type:"application/msword;charset=utf-8"});
注意Blob对象的第二个参数的导出格式,这里使用的msword因为要导出word
(3)调用FileSaver.saveAs导出下载word
FileSaver.saveAs(blob, "导出word的名字.doc");
第一个参数:刚刚新建的Blob对象
第二个参数:文件名(String类型,记得注意导出格式)
最终效果:
当你的word文件需要生成表格时,table之类的布局经过实测都可以使用,图片使用
<img src="xxx"/>
也可以 写入word中,这只是一个简易的demo,记得写项目时进行一下封装哦~
参考链继:
FileSaver:https://www.cnblogs.com/jackyWHJ/articles/10435851.html
参考源码:https://github.com/BetterZxx/mhtml-to-word
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。