江苏省建设厅网站首页水资源监控能力建设 网站

pingmian/2025/10/8 17:49:43/文章来源:
江苏省建设厅网站首页,水资源监控能力建设 网站,如何进行网站运营与规划,做视频网站弹窗很多时候在工作中会碰到完全由前端导出word文件的需求#xff0c;因此特地记录一下比较常用的几种方式。 一、提供一个word模板 该方法提供一个word模板文件#xff0c;数据通过参数替换的方式传入word文件中#xff0c;灵活性较差#xff0c;适用于简单的文件导出。需要…很多时候在工作中会碰到完全由前端导出word文件的需求因此特地记录一下比较常用的几种方式。 一、提供一个word模板 该方法提供一个word模板文件数据通过参数替换的方式传入word文件中灵活性较差适用于简单的文件导出。需要依赖docxtemplater、file-saver、jszip-utils、pizzip。 javascript 复制代码 import Docxtemplater from docxtemplater; import { saveAs } from file-saver; import JSZipUtils from jszip-utils; import PizZip from pizzip;export function downloadWithTemplate(path, data, fileName) {JSZipUtils.getBinaryContent(path, (error, content) {if (error) throw error;const zip new PizZip(content);const doc new Docxtemplater().loadZip(zip);doc.setData({...data.form,// 循环项参数list: data.list,outsideList: data.outsideList,});try {doc.render();} catch (error) {const e {message: error.message,name: error.name,stack: error.stack,properties: error.properties,};ElMessage.error(文件格式有误!);throw error;}const out doc.getZip().generate({type: blob,mimeType:application/vnd.openxmlformats-officedocument.wordprocessingml.document,});saveAs(out, fileName);}); }let data {form: {title: 这是word标题,test: 这是表单1的数据,test1: 111,test2: 222,test3: 333,},outsideList: [{list: [{index: 0,table: 表格第一项,table1: 表格第二项,table2: 表格第三项,},{index: 1,table: 表格第一项,table1: 表格第二项,table2: 表格第三项,},],},{list: [{index: 0,table: 表格第一项,table1: 表格第二项,table2: 表格第三项,},{index: 1,table: 表格第一项,table1: 表格第二项,table2: 表格第三项,},],},],};downloadWithTemplate(template.docx, data, 模板word.docx) 调用downloadWithTemplate方法即可导出如下文件: 注: 上述方法中的path参数为你在vue项目中存放公共文件的位置在vue2中为static文件夹下在vue3中为public文件夹下。 二、根据html代码转换为word文件(推荐) 顾名思义这个方法就是将我们在页面上书写的html代码直接转换成word文件这也是我最推荐的一种方法因为大部分的样式可控且毕竟是我们较为熟悉的方式。需要插件: html-docx-js-typescript、file-saver。 xml 复制代码 import { saveAs } from file-saver; import { asBlob } from html-docx-js-typescript;export function downloadWordWithHtmlString(html, name) {let htmlString !DOCTYPE htmlhtml langenheadmeta charsetUTF-8titleDocument/title/headbody${html}/body/html;asBlob(htmlString).then((data) {saveAs(data, ${name}.docx);}); }使用案例: ini 复制代码 div refwordh3 styletext-align: centerword标题/h3tableborder1cellspacing0width600stylefont-size: 12px; color: #000; text-align: centertr height50td width1001111/tdtd widt200 colspan2合并单元格/tdtd width300最长的一项/td/trtr height100td width100222/tdtd width100222/tdtd width100222/tdtd width100222/td/tr/tabletable width600 border1 cellspacing0tr height50td width1001111/tdtd rowspan3合并包括此行在内的下面三行/td/trtr height100td222/td/trtr height300td3333/td/trtrtd50/td/tr/table /divlet word ref(null); downloadWordWithHtmlString(word.value.innerHTML, html字符串word.docx);生成的word文件可以看到效果和在网页中的html代码一样 另外需要注意的是若是需要在word中添加分页符在需要分页的内容处添加CSS属性page-break-before即可。此时在浏览器上打印出innerHTML值会发现: mdn上介绍page-break-before属性已经被break-before属性替代但是经过我实际测试发现当html字符串是page-break: always时生成的word文件没有分页效果反而是将其替换回page-break-before后实现了分页效果。若有大神知道这是什么问题还望不吝赐教。 因此需要在downloadWordWithHtmlString方法中添加一句正则 htmlString htmlString.replace( /break-(after|before): page/g, page-break-$1: always; );此时就能实现分页效果。 三、使用docx插件 第二种方法有个很致命的问题就是它无法在生成的word文件中添加图片页眉我搜遍了npm也只找到一个能添加文字页眉的插件: html-docx-ts要想实现这个需求就需要用到docx插件。 docx官网的介绍是Easily generate and modify .docx files with JS/TS. Works for Node and on the Browser.意味着是一个专门用于生成word和修改word的文件。该插件就需要一个一个去配置你要生成的项然后组合成一个word。一个简单的案例是 css 复制代码 import {Document,Paragraph,Header,TextRun,Table,TableRow,TableCell,WidthType,Packer, } from docx; import { saveAs } from file-saver;const document new Document({sections: [{headers: {default: new Header({children: [new Paragraph(我是页眉)],}),},children: [new Paragraph({children: [new TextRun({text: 我是文字内容,size: 16,bold: true,}),],}),new Table({columnWidths: [1500, 7500],rows: [new TableRow({children: [new TableCell({width: {size: 1500,type: WidthType.DXA,},children: [new Paragraph({alignment: center,children: [new TextRun({text: 测试,size: 24,font: {name: 楷体,},}),],}),],}),],}),],}),],},],});Packer.toBlob(document).then((blob) {saveAs(blob, test.docx);});导出的word文件形式为 下面是我个人总结的比较常见能用到的功能和配置项 css 复制代码 // 导出文字 1.new Paragraph(text) - 默认字体样式: 宋体,五号字 2.new Paragraph({children: [new TextRun({text: 我是文字内容,size: 16, // 对应word中的字体大小8bold: true, // 是否加粗underline: {type: UnderlineType.SINGLE,color: #2e32ee,}, // 下划线类型及颜色font: {name: 仿宋, // 只要是word中有的字体类型都可以生效},}),],indent: {left: 100,}, // 离左边距离 类似于margin-leftspacing: {before: 150,after: 200,}, // 离上边和下边的距离 类似于margin-top/bottomalignment: center, // 对齐方式pageBreakBefore: true, // 是否在这段文字前加入分页符})// 导出表格 new Table({columnWidths: [1500, 7500], // 表示单行有几项,总宽度是9000,对应宽度;rows: [new TableRow({children: [new TableCell({width: {size: 1500, // 需与columnWidths的第一项对应type: WidthType.DXA, // 官网的介绍是Value is in twentieths of a point// 因为表格的总宽度是以twips(每英寸的1/20)为单位进行计算的},children: [new Paragraph({alignment: center,children: [new TextRun({text: 测试,size: 24,font: {name: 楷体,},}),],}),],}),new TableCell({width: {size: 7500,type: WidthType.DXA,},children: [new Paragraph(ccc),],margins: {top: 500,bottom: 500,left: 500} // 类似于单元格内容的padding}),],}),], })// 导出图片 new Paragraph({children: [new ImageRun({data: base64, // 图片需转成base64的形式transformation: {width: 100,height: 30,}, // 图片宽高}),], })// 设置页眉页脚 headers: {default: new Header({children: [new Paragraph(我是页眉)],}), }, footers: {default: new Footer({children: [new Paragraph(我是页脚)],}), }下面是一个完整的使用案例 css 复制代码 const document new Document({sections: [{headers: {default: new Header({children: [new Paragraph({children: [new ImageRun({data: data:image/jpeg;base64,...,transformation: {width: 150,height: 150,},}),],}),],}),},footers: {default: new Footer({children: [new Paragraph(我是页脚)],}),},children: [new Paragraph(第一行直接默认形式),new Paragraph({children: [new TextRun({text: 下一页,}),],pageBreakBefore: true,}),new Table({columnWidths: [1500, 7500],rows: [new TableRow({children: [new TableCell({width: {size: 1500,type: WidthType.DXA,},children: [new Paragraph({alignment: center,children: [new TextRun({text: 测试,size: 24,font: {name: 楷体,},}),],}),],}),new TableCell({width: {size: 7500,type: WidthType.DXA,},children: [new Paragraph({children: [new ImageRun({data: data:image/jpeg;base64,...,transformation: {width: 150,height: 150,},}),],}),],margins: {top: 500,bottom: 500,left: 500,},}),],}),],}),],},], });Packer.toBlob(document).then((blob) {saveAs(blob, test.docx); });此时导出的word文件如下: 学习更多vue开发知识请下载​​CRMEB开源商城​​附件学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php购物网站开发开发多久国内做的比较好的数据网站

简介: 为了解决大数据、AI 等数据密集型应用在云原生计算存储分离场景下,存在的数据访问延时高、联合分析难、多维管理杂等痛点问题,南京大学 PASALab、阿里巴巴、Alluxio 在 2020 年 9 月份联合发起了开源项目 Fluid。Fluid 本质上是一个云原…

网站建设理论网站开发 思维导图

Modbus RTU 与 Modbus TCP 的区别 一般在工业场景中,使用 Modbus RTU 的场景更多一些,Modbus RTU 基于串行协议进行收发数据,包括 RS232/485 等工业总线协议。采用主从问答式(master / slave)通信。 与 Modbus TCP 不…

深圳做营销网站制作湖北移动官网网站建设

目录 1、call 2、apply 3、bind 4、三者异同 1、call call 函数调用 :1、让函数执行 2、改变函数this指向 参数: 第一个参数是this指 向,第二个参数开始传递给函数的实参 函数名.call(this指…

月刊可以用什么网站做惠州网站模板建站

java单词按字典排序最终的记录字典,或者:我们记录的最常见单词是什么? 日志文件是调试应用程序的最常用方法,当解决错误时,它们肯定可以引导我们朝正确的方向发展。 但是,大多数日志文件每天都会增加一百万…

网站建设天猫店广东网站备案审核时间

CUDA程序错误检测 所有CUDA的API函数都有一个类型为cudaError_t的返回值&#xff0c;代表了一种错误信息&#xff1b;只有返回cudaSuccess时&#xff0c;才是成功调用。 cudaGetLastError()用来检测核函数的执行是否出错cudaGetErrorString()输出错误信息 #include <stdi…

天津交通网站建设WordPress免费小说主题

正题 题目链接:https://www.luogu.com.cn/problem/CF570D 题目大意 nnn个点的一棵树&#xff0c;每个节点有字母&#xff0c;每次询问一个节点xxx的子树中深度为kkk的所有点的字母能否经过重排构成一个回文串。 解题思路 首先把每个字母的奇偶状压一下 然后方法比较多&#x…

三门峡 网站建设农村自建房设计图效果图

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…

网站主机空间家装软装设计 上海

上面的意思是 警告&#xff1a;fread&#xff08;&#xff09;&#xff1a;长度参数必须大于0 在PHP中&#xff0c;fread() 函数用于从打开的文件中读取数据。该函数的原型如下&#xff1a; string fread ( resource $handle , int $length ) 其中&#xff0c;$handle 参数是…

网站开发 海淀宁波方正建设监理网站

目录 六、区间 48. 汇总区间 ① 49. 合并区间 ② 50. 插入区间 ② 51. 用最少数量的箭引爆气球 ② 七、栈 52. 有效的括号 ① 53. 简化路径 ② 54. 最小栈 ② 55. 逆波兰表达式求值 ② √- 56. 基本计算器 ③ 六、区间 48. 汇总区间 ① 给定一个 无重复元素 的 …

网站建设发布ps科技感seo提高网站排名

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; 神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.网络发展1.1.背景1.2.类型 2.网络协议2.1.什么是协议2.2.协议…

wordpress做网站教程关键词优化是怎么做的

在互联网技术不断发展的现在&#xff0c;鸿蒙操作系统的出现标志着是能技术领域的一次重大突破&#xff0c;鸿蒙作为华为推出的一代操作系统&#xff0c;鸿蒙不仅达代表了自主创新的力量&#xff0c;还因为独特的分布式架构和全场景适配能力而备受关注。随着鸿蒙生态的不断完善…

如何管理网站域名平面设计好就业吗

学习视频参考 1 面向对象的三大特征 1.1 封装 1.1.1 目的 隐藏实现细节&#xff0c;实现模块化。 1.1.2 特性 访问权限&#xff1a; public&#xff1a;可以给所有对象访问。protected&#xff1a;仅对子类开放。private&#xff1a;仅对自己开放&#xff0c;可以通过友元…

怎么才能成功做网站山西建设工程协会网站

SSH隧道 简介 SSH隧道是一种通过SSH协议在两个网络节点之间建立安全通信的技术。它可以用于多种用途&#xff0c;包括加密和保护敏感数据传输、绕过防火墙限制、远程访问内部服务等。 应用&#xff1a; 端口转发&#xff1a;SSH隧道可以将本地端口转发到远程主机上&#xf…

做网站的证书html指令代码大全

目录 引言&#xff1a;Docker Nacos 单个部署1.1 什么是 Docker&#xff1f;Docker 的概念和工作原理Docker 为什么受到广泛应用和认可 1.2 什么是 Nacos&#xff1f;Nacos 的核心功能和特点Nacos 在微服务架构中的作用 1.3 Docker 单个部署 Nacos Docker Nacos 集成部署总结&a…

商务网站创建多少钱可做设计任务的网站

1、Jmeter:概述 1.1 是什么&#xff1f; Jmeter是Apache公司使用Java 开发的一款测试工具 1.2 为什么&#xff1f; 高效、功能强大 模拟一些高并发或多次循环等特殊场景 1.3 怎么用&#xff1f; 下载安装 1、下载jmeter&#xff0c;解压缩2、安装Java环境&#xff08;jmet…

凡科网站怎么做链接网站设计形式

手头有比较多的技术书籍&#xff0c;弃之可惜&#xff0c;放之惭愧&#xff0c;借助空闲时间&#xff0c;先草读&#xff0c;再demo整理。 unix环境高级编程 草读简单整理&#xff0c;为下一步整理细节技术点做准备。 &#xff08;仅个人笔记&#xff09; 15&#xff1a;进程…

怎么做网站流量统计分析济南科技市场做网站

据可信度较高的消息源透露&#xff0c;2020 年的《使命召唤》将是《黑色行动》的重启作。而据之前的报道&#xff0c;《黑色行动》开发商 Treyarch 正在开发今年的《使命召唤》&#xff0c; Sledgehammer Games 和 Raven Software 负责辅助工作。该项目代号为“宙斯”&#xff…

网站的开发公司倒闭对网站使用地方旅游网站建设方案

目标&#xff1a;layui 实现点击按钮添加一行解决方案&#xff1a;方案1、table 是用转换静态表格的方式创建的&#xff0c;写一个button&#xff0c;每次点击按钮&#xff0c;就添加一个 标签&#xff1b;方案2、table 是用方法渲染的方式创建的&#xff0c;写一个button,每次…

淘宝网站建设类目网站加油站

标签分配 部分内容参考自&#xff1a;https://www.bilibili.com/video/BV1ge41117va 简单介绍一些特点&#xff0c;主要结合动态标签分配的一个实例来看 从更高抽象的层面理解 assign&#xff1a; 所有用于最终检测的特征图上的所有 point 都具备学习并预测目标的能力&#xf…

网站怎么做图片动态图片不显示了app store应用商店下载

UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。 好了&#xff0c;开始讲述我的应用经验&#xff0c;这只是很菜鸟的经验&#xff0c;高手就不用看了。 第一步&#xff0c;请从此下载此组件。解压&#xff0c;把UrlRewriter.dll copy到你…