前端利用JSZipUtils将前端状态数据填入word模板中的

public文件夹下存入模板文件

"file-saver": "^2.0.5",
"jszip-utils": "^0.1.0",
"pizzip": "^3.1.4",
"docxtemplater": "^3.42.7",
<template>
<div>
</div>
</template>
<script setup>
import {reactive, defineExpose} from 'vue'
import Docxtemplater from 'docxtemplater';
import JSZip from 'jszip';
import JSZipUtils from 'jszip-utils';
import { saveAs } from 'file-saver';
const state = reactive({
exportData: null, // 导出的word数据
fileTemplate: '', // public下存放的word模板名称
fileName: '' // 输出文件名
})
const exportWord = () => {
console.log('output-> word导出', )
let targetFileName = ''
if(state.fileTemplate === 'xxx') {
targetFileName = 'zxdc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'sjdc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'tshc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'szdc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'xcdc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'spdc'
}
if(state.fileTemplate === 'xxx') {
targetFileName = 'jqwh'
}
// 读取并获得模板文件的二进制内容
JSZipUtils.getBinaryContent(`${targetFileName}.docx`, (error, content) => {
// 抛出异常
if (error) throw error;
// 创建一个JSZip实例,内容为模板的内容
let zip = new JSZip(content);
// 创建并加载docxtemplater实例对象
let doc = new Docxtemplater();
doc.loadZip(zip);
// 设置模板变量的值
doc.setData({
...state.exportData
});
try {
// 用模板变量的值替换所有模板变量
doc.render();
} catch (error) {
// 抛出异常
let e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties
};
console.log(JSON.stringify({ error: e }));
throw error;
}
// 生成一个代表docxtemplater对象的zip文件(不是一个真实的文件,而是在内存中的表示)
let out = doc.getZip().generate({
type: 'blob',
mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
});
// 将目标文件对象保存为目标类型的文件,并命名
saveAs(out, state.fileName + '.docx');
});
}
defineExpose(
{
exportWord,
state
}
)
</script>
posted @   Felix_Openmind  阅读(556)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
历史上的今天:
2023-03-27 Vue3综合使用案例
2023-03-27 Vue3中的Vuex
2023-03-27 defineExpose(父拿子方法)
2023-03-27 defineEmits传值(子传父)
2023-03-27 defineProps传参(父传子)
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示