手机版

在客户端导出word文档的方法

时间:2021-08-30 来源:互联网 编辑:宝哥软件园 浏览:

前言

我的项目中有一个要求:单击按钮生成可编辑的word文档顺序详细信息

我使用Vue.js作为前端框架,node.js作为后端。

我参考了下面两篇用node.js生成和导出word文档的文章,写得不错(github上的文章中也有用node.js生成word、excel和ppt的例子,需要详细阅读)

https://www.jb51.net/article/144769.htm

https://github.com/Ziv-Barber.

问题

node.js上面两篇文章已经很不错了,但是我在实现的过程中还是有一个问题:我可以在后端生成一个完整的word文档,但是回到前端下载的时候遇到了一个问题。一开始一直以为是node.js的后台代码引起的,毕竟是第一次写_,但是在不断的测试中发现:

1.单击按钮并使用vue中的axios请求localhost :8081/order/getdoc。不是直接生成word文档,而是检查返回的数据console.log(res),发现得到的数据是一堆乱码字符串。

2.但是,当你在浏览器地址栏中请求相同的后端接口时,你发现你可以生成一个完整的word文档!

问题的根源

当我得到线索时,我开始在网上搜索。我发现ajax被接受的类型只能是字符串,不能是流类型,所以下载文件是不可能的。ajax请求的数据只能存储在javascript内存空间,可以通过javascript访问,但是不能保存到硬盘,因为JavaScript不能直接和硬盘交互,否则会出现安全问题。

Axios是第一个第三方ajax库,所以也是如此。

解决办法

我提到的解决方案是一篇关于axios下载excel(二进制)https://www.jb51.net/article/144771.htm.的文章

解决方案:使用blob对象,Blob对象可以看作是存储二进制数据的容器,它是一个大型的二进制对象,也是存储二进制文件的容器。

methods:{ handleClick(行){ console.log(行);var orderId=row . orderId row . oid . ToString();console . log(OrderId);这个。$ajax({ method:'get ',URL : ' http://localhost 33608081/order/GetDoc ',响应类型:' blob'})。然后((RES)={//其中res.data是返回的blob对象varblob=new lob([RES . data],{ type : ' application/vnd . openxmlformats-office document . wordproching ml . document;charset=utf-8 ' });//application/vnd . openxmlformats-office document . wordprocessingml . document在此,文档类型var download element=document . create element(' a ');var href=window。URL . CreateObjectURl(blob);//创建下载链接downloadElement.href=hrefdownloadeelement . download=OrderId '。docx ';//下载后的文件名为document . body . appendchild(download element);downloadeelement . click();//点击下载document . body . remove child(download element);//下载完成,删除元素window . URL . revokeobjecturl(href);//释放blob对象})} }

摘要

以上就是边肖介绍的在客户端从nodejs(officegen) vue(axios)导出word文档的方法。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:在客户端导出word文档的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。