一 前提
应项目需求,需要把前端生成word文档并下载。此项目我使用的是vue框架。本篇文章主要是记录自己在实现中遇到的问题以及最终使用方式。
二 实现方式
我的方式是将 html 转为word文档并下载。现在网上最常见的是使用 html-docx-js 配合 file-saver 使用,但是我在使用的时候报错。一查,是因为html-docx-js构建出来的代码包括with语句,而在主流的现代框架中(vue/react/angular)中使用不了(它们目前的构建工具都默认启用了严格模式)。而后,我又看到一个 html-docx-js-typescript 库,便试了一下。对于简单的word还是可以的。原文链接如下:插件推荐 | html文本转docx文档 - 简书
三 开始使用
1.安装依赖
- yarn add html-docx-js-typescript
- yarn add file-saver
- yarn add @types/file-saver
2.使用
// 导入方法
import {saveAs} from "file-saver";
import {asBlob} from 'html-docx-js-typescript';
// 下载
const handleOk = async () => {
// htmlId 是需要下载的内容的容器ID
const content = document.getElementById('htmlId')?.innerHTML;
if (content) {
try {
const htmlString = `<!DOCTYPE html>
<html lang="en">
<head>
<meta content="text/html;charset=utf-8" />
</head>
<body>
<div>
${content}
</div>
</body>
</html>`;
asBlob(htmlString).then((data): any => {
saveAs(data, '下载word.docx') // 保存为docx文件
});
} catch (error) {
console.log("文件下载失败:",error);
}
}
};
// 这是要下载的文档内容,根据自己的需求写即可。放到自己的代码中。
<div id="htmlId" style="color: red;font-size: 20px">
<div>这是测试的文档内容</div>
</div>
效果如下:
四 其他方式(docx.js)
后来,我发现,docx.js 好像也可以进行word文件生成和下载。只不过这不是将html转为word,而是自己根据实际内容利用docx.js 中特定的方式去生成word(通过编程方式创建 Word 文档)。并且docx.js功能更强大,可以生成各种复杂格式的文档,比如:支持 表格、图片、页眉、页脚等元素的添加。有兴趣的同学可以试一下:
具体使用方式见docx.js 官网:Getting started with React Grid component | Syncfusion