页面转word的那些事

背景

有些时候需要将页面内容或者是页面的数据通过word进行下载,以方便客户进行二次编辑,而不是直接导出图片或者是pdf。

想在页面端点击下载成word,那必然需要服务端来进行读写文件,无论是你后端编辑好的内容流,还是前端自身根据数据进行渲染。而现代浏览器恰好也是支持的,我们下面就介绍几个方式。

实现方案

第一种,使用docxtemplater
常规使用,就是在你本地创建一个word模版,然后通过官方约定的数据格式要求,用数据进行填充。那如果,我是想内容模块能够互换位置,内容完全的定制化,那就不太好办了,也只能用于一些简单的场景。复杂的模块都是收费的~
在这里插入图片描述
第二种,则是虚拟构建一套html文本,然后通过插件html-word转化成word进行下载,这里就可以达成我们想要的效果,只要你会html+css+js基本上问题不大

可以通过htmlDocx插件转化为blob数据,通过额外的配置项可以配置word的页面边距,基本上就是可以的

import htmlDocx from './html-word';
import saveAs from 'file-saver';const content = myRef.current.innerHTML;const converted = htmlDocx.asBlob(content, {margins: { left: 1082, right: 1082 },});await saveAs(converted, datas.name);

注意事项:

  • 如果你的页面有echarts或者canvas类的,需要转化为图片,获取全局echarts dom节点,new一个image的dom节点,插在echarts同级dom(各大框架语法不同,下方为借鉴)
 var img = new Image(); //重头戏在这 图标的大小
chartRefs.map((ref) => {let chart = ref.getEchartsInstance();setTimeout(function () {// 防止渲染过程中,未渲染完成就绘制成图片var img = new Image();img.src = chart.getDataURL({type: 'png',backgroundColor: '#fff',});const option = chart.getOption();img.width = 660img.height = 400ref.ele.insertAdjacentElement('beforebegin', img);setnum++;if (setnum == chartRefs.length) {setnum = 0;callback?.();}}, 800);
});
  • css样式需要使用style内联样式,以防止获取dom节点转化word不生效;
  • 像素单位尽可能使用pt为单位,不要使用px,以防止office、wps显示不同的兼容问题;
  • 图片的宽高等属性需要使用 dom节点原生的width、height,否则不生效;
  • 最好不要使用第三方的UI框架,以防止不生效;
  • 首行锁进,不能使用文本的px进行计算,比如字体16px,text-indent: 32px,就是不可行的,应该使用2em;
  • 行距,默认情况下想设置比如1.5倍行距,只能使用百分比150%,而其他的设置lineHeight为1.5、1.5em,px都会被认为最小值xx磅

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

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

相关文章

第十四篇【传奇开心果系列】Python自动化办公库技术点案例示例:深度解读Python自动化处理图像

传奇开心果博文系列 系列博文目录Python自动化办公库技术点案例示例系列 博文目录前言一、Python自动化图像处理的优点介绍二、Python常用图像处理库和功能介绍三、强大且易于上手示例代码四、丰富的算法资源示例代码五、批量处理图片示例代码六、支持多种图像格式示例代码七、…

智慧粮仓监测系统解决方案

一、概述 粮食储备是每个国家战略物资中最为重要的一项储备;而随着现代化农业的快速发展以及国家经济发展的需要,我国粮食产量和储备量长期处于世界前列。传统的粮仓由于修建年代久远,可能存在着设施落后,实时监控不到位的现象&am…

python-study-day1

ps:前言 可做毕设,html,web,app,小程序,bug修改,可加急 作者自述 作为一名前端开发工程师,这个大环境不好的情况下,我试过我前端接单子但是没有后端&#xff0c…

物理随机接入信道PRACH数据生成

NR随机接入前导码(Preamble)采用Zadoff Chu序列,长度分别为839和139。 物理随机接入信道(PRACH)前导码格式的定义包括PRACH OFDM符号个数、循环前缀(CP)长度和保护时间(GT&#xff…

0 idea搭建springboot项目

1 2 3 4 5 配置文件 application.yaml server:servlet:context-path: /app #项目名controller //注入到spring容器 Controller public class HelloController {GetMapping("hello")ResponseBodypublic String hello(){return "Hello,SpringBoot";} }启…

WinRAR再爆0 day漏洞,0 day漏洞该如何有效预防

WinRAR再爆0 day漏洞,已被利用超过4个月。 Winrar是一款免费的主流压缩文件解压软件,支持绝大部分压缩文件格式的解压,全球用户量超过5亿。Group-IB研究人员在分析DarkMe恶意软件时发现WinRAR在处理ZIP文件格式时的一个漏洞,漏洞…

虚拟网络设备的真正使命:实现有控制的通信

在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中…

从挑战到机遇:HubSpot如何帮助企业化解出海过程中的难题

企业出海挑战与对策 随着全球化的加速推进,越来越多的企业开始将目光投向海外市场,以寻求更广阔的发展空间。然而,在出海的过程中,企业往往面临着诸多挑战,其中文化差异、法律限制等问题尤为突出。今天运营坛将对这些…

LeetCode 题目:两个总和

LeetCode 题目:两个总和 描述: 编写一个函数,输入为一个整数数组nums和一个目标整数target,要求找到数组中两个数的和等于target,并返回这两个数的索引。 函数定义: def two_sum(nums: List[int], targe…

宏集PLC如何为楼宇自动化行业提供空调、供暖与通风的解决方案?

一、应用背景 楼宇自动化行业是通过将先进的技术和系统应用于建筑物中,以提高其运营效率、舒适度和能源利用效率的行业,其目标是使建筑物能够自动监控、调节和控制各种设备和系统,包括照明系统、空调系统、安全系统、通风系统、电力供应系统…

ML.NET(二) 使用机器学习预测表情分析

这个例子使用模型进行表情分析: 准备数据: happy,sad 等; using Common; using ConsoleApp2; using Microsoft.ML; using Microsoft.ML.Data; using System.Diagnostics; using static Microsoft.ML.Transforms.ValueToKeyMappingEstimator;…

分布式 SpringCloudAlibaba、Feign与RabbitMQ实现MySQL到ES数据同步

文章目录 ⛄引言一、思路分析⛅实现方式⚡框架选择 二、实现数据同步⌚需求分析⏰搭建环境⚡核心源码 三、测试四、源码获取⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助…

高中数学:三角函数的定义

一、定义 二、常用三角函数值 三、题型 1、利用定义求值 例题 2、利用定义求范围 例题

蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码

我写的省赛及历年模拟赛代码 链接:https://pan.baidu.com/s/1A0N_VUl2YfrTX96g3E8TfQ?pwd9k6o 提取码:9k6o

大模型训练:如何解决GPU万卡互联挑战?

如何解决GPU万卡互联的挑战 近日,字节跳动携手北京大学研究团队发布重磅论文,揭示了一项革命性技术:将大型语言模型训练扩展至超10,000块GPU的生产系统。此系统不仅解决了万卡集群训练大模型时的效率和稳定性难题,更标志着人工智能…

Linux内核中常用的C语言技巧

Linux内核采用的是GCC编译器,GCC编译器除了支持ANSI C,还支持GNU C。在Linux内核中,许多地方都使用了GNU C语言的扩展特性,如typeof、__attribute__、__aligned、__builtin_等,这些都是GNU C语言的特性。 typeof 下面…

分类模型决策边界、过拟合、评价指标、PR、ROC曲线

文章目录 1、线性逻辑回归决策边界1.2、使用自定义函数绘制决策边界1.3、三分类的决策边界1.4、多项式逻辑回归决策边界 2、过拟合和欠拟合2.2、欠拟合2.3、过拟合 3、学习曲线4、交叉验证5、泛化能力6、混淆矩阵7、PR曲线和ROC曲线 x2可以用x1来表示 1、线性逻辑回归决策边界 …

YOLOv8改进 添加大核卷积序列注意力机制LSK

一、Large Separable Kernel Attention论文 论文地址:2309.01439.pdf (arxiv.org) 二、Large Separable Kernel Attention注意力结构 LSK通过使用大型可分离卷积核来提升注意力机制的效果。在传统的注意力机制中,常用的是小型卷积核,如1x1卷积,来计算注意力权重和特征表示…

合合信息分享数据资产管理经验,释放数据要素价值,发展新质生产力

为加快推动产业数据行业创新中心建设、搭建高效的供需对接平台,4月9日,上海数据交易所、上海合合信息科技股份有限公司(下称“合合信息”)和上海市数商协会联合举办DSM系列——产业数据行业创新中心专题研讨会,以“数据…