dom元素生成word文档(vue2、vue3)

导出的文档中包含图片情况下,word文档图片会加载慢一些,可以等一下

引入node包

npm install html-docx-js
npm install file-saver

vue3时需要将html-docx-js 改为 html-docx-fixed 进行引入

html-docx-js中有一个对象函数已经弃用,所以导致无法使用

 代码

//script标签中引入
import FileSaver from "file-saver";
import htmlDocx from "html-docx-js/dist/html-docx";




//导出dom元素方法

    demo2() {
      // 两个class,一个是代表宽度300,一个是代表宽度600

      let contentHtml = document.getElementById("domId").innerHTML;
      let content = `
    	 	<!DOCTYPE html><html>
            	<head>
	                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	            </head>
	            <body>
	                <div>
                  		${contentHtml}
                	</div>
	            </body>
            </html>`;
//图标宽高可能不生效,所以需要使用下面方法,给图片设置宽高
            content = content.replaceAll('<img',`<img width="600" height="200" `);
      let converted = htmlDocx.asBlob(content);
      FileSaver.saveAs(converted, "测试.docx");
    },

Vue2 项目中实现生成包含图片的 Word 文档功能,可以通过以下方法和库来完成。以下是详细说明: ### 方法一:使用 `html-docx-js` 和 `file-saver` 这种方法通过将 DOM 元素的内容转换为 Word 文档并支持图片嵌入[^3]。 #### 实现步骤 1. **安装依赖** 需要安装 `html-docx-js` 和 `file-saver` 库。 ```bash npm install html-docx-js file-saver ``` 2. **代码示例** 下面是一个完整的代码示例,展示如何将包含图片的 DOM 元素内容导出为 Word 文档。 ```javascript import FileSaver from "file-saver"; import htmlDocx from "html-docx-js/dist/html-docx"; export default { methods: { exportToWord() { // 获取需要导出的 DOM 元素内容 let contentHtml = document.getElementById("domId").innerHTML; // 构建 HTML 字符串,确保图片宽高生效 let content = ` <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>${contentHtml}</div> </body> </html> `; // 替换图片标签以设置固定宽高 content = content.replaceAll(&#39;<img&#39;, &#39;<img width="600" height="400" &#39;); // 转换为 Word 文档格式 let converted = htmlDocx.asBlob(content); // 保存文件 FileSaver.saveAs(converted, "测试.docx"); } } }; ``` 3. **注意事项** - 确保 DOM 元素中的图片路径是正确的,可以是相对路径或绝对路径。 - 如果图片不显示,可能是因为图片路径无法被正确解析,建议使用 Base64 格式的图片[^3]。 --- ### 方法二:使用 `wangeditor` 插件 如果项目中已经集成了 `wangeditor` 编辑器,可以直接利用其强大的文档处理能力[^1]。 #### 实现步骤 1. **初始化编辑器** 在 Vue2 项目中引入并初始化 `wangeditor`。 ```javascript import E from &#39;wangeditor&#39;; export default { mounted() { const editor = new E(&#39;#editor&#39;); editor.create(); } }; ``` 2. **生成 Word 文档** 使用 `wangeditor` 的内容导出功能,并结合 `html-docx-js` 将内容转换为 Word 文档。 ```javascript methods: { generateWordFromEditor() { const editor = this.$refs.editor; const contentHtml = editor.txt.html(); // 获取编辑器内容 let content = ` <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <div>${contentHtml}</div> </body> </html> `; // 替换图片标签以设置固定宽高 content = content.replaceAll(&#39;<img&#39;, &#39;<img width="600" height="400" &#39;); // 转换为 Word 文档格式 let converted = htmlDocx.asBlob(content); // 保存文件 FileSaver.saveAs(converted, "测试.docx"); } } ``` --- ### 方法三:使用 `docxtemplater` 和模板 如果需要更复杂的 Word 文档生成(如动态数据填充),可以使用 `docxtemplater`[^4]。 #### 实现步骤 1. **安装依赖** ```bash npm install docxtemplater pizzip ``` 2. **代码示例** ```javascript import Docxtemplater from "docxtemplater"; import PizZip from "pizzip"; import FileSaver from "file-saver"; export default { methods: { generateComplexWord() { const zip = new PizZip(this.getTemplateFile()); // 加载模板文件 const doc = new Docxtemplater(zip, { paragraphLoop: true, linebreaks: true }); // 动态数据 const data = { title: "示例文档", date: "2024-09-23", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" // Base64 图片 }; // 设置数据 doc.setData(data); try { // 渲染模板 doc.render(); } catch (error) { console.error(error); } // 生成文件 const out = doc.getZip().generate({ type: "blob", mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" }); // 保存文件 FileSaver.saveAs(out, "复杂文档.docx"); }, getTemplateFile() { // 返回模板文件的 Blob 数据 return fetch("/template.docx").then((res) => res.arrayBuffer()); } } }; ``` --- ### 总结 - 如果只需要简单的 DOM 内容导出,推荐使用 `html-docx-js` 和 `file-saver`[^3]。 - 如果项目中已集成 `wangeditor`,可直接复用其功能。 - 如果需要复杂的动态数据填充,推荐使用 `docxtemplater`[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值