当前位置: 首页 > news >正文

将后端数据转换为docx文件

使用docx

npm install docx 

按照注释处理数据并转换为对应的bolb数据流 

<template><Button type="primary" @click="handleDocxCreate">{{buttonTitle || "报告生成"}}</Button>
</template><script>
import {Document,Paragraph,TextRun,Packer,AlignmentType,Table,TableCell,TableRow,WidthType,BorderStyle,
} from "docx";
export default {props: {buttonTitle: {// 报告生成type: String,},docxData: {type: Array,required: true,//   [//     {//       isTable: Boolean, // 是否为表格,默认为false,若table为true,则data必填,其余忽略//       isAlignment: String, // 字段位置,默认为LEFT,可以为BOTH,CENTER,END,LEFT,RIGHT,START...//       isIndent: Boolean, // 是否首行缩进两个字符,默认为false//       text: String, // 内容//       size: Number, // 字体大小,默认为22//       font: String, // 字体类型,默认为仿宋//       isBold: Boolean, // 是否加粗,默认为false//       data: [ // Array//         [//           {//             text: String, // 表格单元格内容//             width: Number, // 单元格宽度,默认为每个单元格平均分配宽度,如果不设置则会自动计算//             columnSpan: Number, // 合并单元格,默认为1//             isBolb: Boolean, // 是否加粗,默认为false//             size: Number, // 字体大小,默认为22//             font: String, // 字体类型,默认为仿宋//           }//         ]//       ], // 表格数据,如果isTable为true,则必填////     }//   ]},},data() {return {};},methods: {/*** 文件blob流生成*/async handleDocxCreate() {// 创建 Word 文档const doc = new Document({sections: [{properties: {},children: this.docxData.map((item) => {// 如果是表格,则处理表格数据if (item.isTable) {return this.handleTabel(item.data);} else {// 否则处理普通文本段落return new Paragraph({alignment: AlignmentType[item.isAlignment || "LEFT"],indent: {firstLine: item.isIndent ? 500 : 0, // 直接设置缩进值(单位为twips,1厘米=567twips,约1.27厘米缩进)},children: [new TextRun({text: item.text || '',bold: item.isBold || false,size: item.size || 22,font: item.font || "仿宋",}),],});}}),},],});// 生成 Blob 对象const blob = await Packer.toBlob(doc);},/*** 表格* @param {*} data*/handleTabel(data) {const table = new Table({width: {size: 100,type: WidthType.PERCENTAGE,},rows: data.map((row, rowIndex) =>new TableRow({children: row.map((cell, cellIndex) => {// 合并单元格return new TableCell({width: {size: cell.width || (cell.length / row.length) * 100,type: WidthType.PERCENTAGE,},columnSpan: cell.columnSpan || 1,children: [new Paragraph({alignment: AlignmentType.CENTER,children: [new TextRun({text: cell.text || '',bold: cell.isBolb || false,size: cell.size || 22,font: cell.font || "仿宋",}),],}),],// 可选:设置单元格样式shading: { fill: "F3F3F3" }, // 背景色borders: {top: {style: BorderStyle.SINGLE,size: 4,color: "000000",},bottom: {style: BorderStyle.SINGLE,size: 4,color: "000000",},left: {style: BorderStyle.SINGLE,size: 4,color: "000000",},right: {style: BorderStyle.SINGLE,size: 4,color: "000000",},},});}),})),// 设置表格对齐为左对齐alignment: AlignmentType.LEFT,borders: {top: { style: BorderStyle.SINGLE, size: 4, color: "000000" },bottom: { style: BorderStyle.SINGLE, size: 4, color: "000000" },left: { style: BorderStyle.SINGLE, size: 4, color: "000000" },right: { style: BorderStyle.SINGLE, size: 4, color: "000000" },},});return table;},},
};
</script>
<style scoped>
</style>

若需要将该文件传给后端,需要转换bolb数据流的类型

      let formData = new FormData();// 转换文件类型const file = new File([blob], `${this.fileName || "报告.docx"}`, {type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",});formData.append("file", file);ajax.post(uploadUrl, formData).then((response) => {console.log("文件上传成功", response);})

文件下载

const downloadLink = document.createElement("a");
const blobUrl = URL.createObjectURL(blobData);downloadLink.href = blobUrl;
downloadLink.download = "name.docx";
downloadLink.click();URL.revokeObjectURL(blobUrl);

 

相关文章:

  • 13.18 Ollama+LLaMA3企业级部署实战:6步打造私有化大模型高效引擎
  • <8>-MySQL复合查询
  • 前端三剑客基础案例001
  • 下载指定版本的matplotlib
  • 图片去水印,图片变清晰,完成免费
  • Java并发编程实战 Day 21:分布式并发控制
  • ONLYOFFICE 的AI技巧-1.集成OCR、文本转图像、电子表格集成等新功能
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(一)
  • 激光雷达 + 视觉相机:高精度位姿测量方案详解
  • Altera系列FPGA基于ADV7180解码PAL视频,纯verilog去隔行,提供2套Quartus工程源码和技术支持
  • 多个机器人同时加载在rviz及gazebo同一个场景中
  • Blender 简介 ~ 总结,如何下载Blend格式模型
  • UDS协议中0x31服务(Routine Control)详解及应用
  • 网络安全防护:点击劫持
  • uniapp中vue3 ,uview-plus使用!
  • 【SystemVerilog 2023 Std】第5章 词法约定 Lexical conventions (2)
  • 3款工具打造递进图:快速入门与个性化定制的实用指南
  • 【DNS解析】DNS解析从入门到精通
  • 音视频的前端知识
  • Git更新master分支完整指南:从拉取到推送的全流程
  • 四川省工程建设信息官方网站/引流推广多少钱一个
  • 视频素材交易网站建设/品牌推广与传播怎么写
  • 老网站做成适合手机端的网站怎么做/百度热线电话
  • 政府网站建设运营情况汇报/一个具体网站的seo优化
  • 电子科技 深圳 网站建设/百度seo营销
  • 做彩平的材质网站/全球最大的中文搜索引擎