html-docx-js-typescript——将html生成docx文档

html-docx-js-typescript源码:GitHub - caiyexiang/html-docx-js-typescript: Convert HTML documents to docx format.

html-docx-js地址:html-docx-js - npm

*简单使用:

获取需要转为word文档的html节点,借助file-saver提供的saveAs方法和html-docx-js提供的asBlob方法转换我们设置好的html即可。

简单使用:
import htmlDocx from "html-docx-js/dist/html-docx";
import { saveAs } from "file-saver";
import $ from "jquery";function exportWord(dom, fileName) {setTimeout(() => {let htmlStr = `<!DOCTYPE html><html lang="en"><body style="font-family:方正仿宋_GBK;mso-ascii-font-family:'Times New Roman'">${dom.html()}</body></html>`;saveAs( htmlDocx.asBlob(htmlStr, { orientation: "landscape" }), fileName );}, 200);
}

*demo示例:

 

包含图片( echarts可直接通过自带的方法.getConnectedDataURL({ type: "png" })获取base64)

// img图片转换base64
// 结构<div><h1>html转化word</h1><p>Enter/paste your document here:</p><textarea id="content" cols="60" rows="10"><p>We all live in a yellow submarine, yellow submarine, yellow submarine, yellow submarine</p><p>Images can also be exported if you source them as base64 DATA URI.</p><img src="cat.jpg" /><img src="http://docs.asprain.cn/javatutorial/images/oracle-java-logo.png" /></textarea><div class="page-orientation"><span>Page orientation:</span><label><input type="radio" name="orientation" value="portrait" checked>Portrait</label><label><input type="radio" name="orientation" value="landscape">Landscape</label></div><button id="convert">Convert</button><div id="download-area"></div></div>
// script
<script src="./FileSave.js"></script>
<script src="./html-docx.js"></script>
// 逻辑
document.getElementById('convert').addEventListener('click', function(e) {e.preventDefault();const content1 = document.getElementById('output').innerHTML;const content = document.getElementById('content').value;embedImage(content).then((content) => {var orientation = document.querySelector('.page-orientation input:checked').value;var blob = htmlDocx.asBlob(content, {orientation: orientation});saveAs(blob, 'test.docx');var link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = 'document.docx';link.textContent='Click here if your download has not started automatically';var downloadArea = document.getElementById('download-area');downloadArea.innerHTML = '';downloadArea.appendChild(link);});});/*** @desc 将图片嵌入HTML中* @param {html} String* @return Promise(html)*/function embedImage(html){if(typeof(html) !== 'string') return;let doc = new DOMParser().parseFromString(html, 'text/html');debugger;let images = doc.images;//if(images.length==0)return '<!doctype html>'+doc.documentElement.outerHTML;return new Promise((resolve,reject)=>{function _iterate(i){if(i==images.length){resolve('<!doctype html>'+doc.documentElement.outerHTML);return;// 终于}let img=images[i];let url=img.src;// 正在嵌入第i张图片getBase64(url,function(base64){if(base64==null){img.remove();_iterate(i);}else {img.src=base64;_iterate(++i);}})}_iterate(0);})}/*** @desc 从URL取得base64* @param {url} String 网址* @param {callback} Function 如果能打开图片,参数为打开图片的blob,如果不能打开图片,参数为null* @return void*/function getBase64(url,callback) {const xhr = new XMLHttpRequest();xhr.responseType='blob'xhr.onload = () => {const blob=xhr.response;var reader = new FileReader();reader.onload = function (e) {callback(reader.result);}reader.readAsDataURL(blob);};xhr.onerror = (err) => {callback(null)};xhr.open('GET', url, true);xhr.send(null);}
设置样式

找到需要操作的dom元素,dom添加行内样式即可,注意:添加行内样式时,需要注意代码执行顺序,避免有些行内样式被覆盖。

项目中遇到问题:

1.util问题

 

参考:Module not found: Error: Can‘t resolve ‘path‘_can't resolve 'path-CSDN博客

 

2.表格样式问题

参考:JS word下载(含两种方式:html转word、模板转word) - 简书

3.html-docx-js的with函数问题

修改源码:

 

参考:JS word下载(含两种方式:html转word、模板转word) - 简书

插件推荐 | html文本转docx文档 - 简书

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

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

相关文章

判断闰年(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int year 2000;//执行循环判断&#xff1b;while (year < 2010){//执行流程&#xff1b;//判断能否整除4&#xff1…

Chrome历史版本下载地址:Google Chrome Older Versions Download (Windows, Linux Mac)

最近升级到最新版本Chrome后发现页面居然显示错乱,是在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 32-bit VersionSizeDate104.0.5112.10279.68 MB2022-05-30…

Vue3学习日记 Day4 —— pnpm,Eslint

注&#xff1a;此课程需要有Git的基础才能学习 一、pnpm包管理工具 1、使用原因 1.1、速度快&#xff0c;远胜过yarn和npm 1.2、节省磁盘空间 2、使用方式 2.1、安装方式 npm install -g pnpm 2.2、创建项目 pnpm create vue 二、Eslint配置代码风格 1、环境同步 1、禁用Pret…

华为配置WAPI-PSK安全策略实验

配置WAPI-PSK安全策略示例 组网图形 图1 配置WAPI-PSK安全策略组网图 配置流程组网需求配置思路配置注意事项操作步骤配置文件 配置流程 WLAN不同的特性和功能需要在不同类型的模板下进行配置和维护&#xff0c;这些模板统称为WLAN模板&#xff0c;如域管理模板、射频模板、VAP…

Jenkins使用pipeline流水线部署项目

新建流水线任务 前面的项目整个部署日志都在一个控制台页面&#xff0c;出现了错误不能快速定位不方便查阅 Jenkins提供了流水线方式的任务 这里我新建一个叫“pipeline-mytest”的流水线任务 在流水线出右侧有内置的样式&#xff0c;这里我选择了helloworld的样式。 构建一…

25考研|北大软微会「爆炸」吗?

软微不是已经爆炸了吗&#xff1f; 大家去看看他的录取平均分就知道了&#xff0c;没有实力千万别碰&#xff0c;现在考软微已经不存在捡漏之说。 110408的复试线已经划到了465分&#xff0c;这个人真的不低了&#xff0c;因为有数学一和408两个比较难的专业课&#xff0c;复…

网络编程 - 套接字

1、预备知识 1.1、理解源IP地址和目的IP地址 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址&#xff1b; 思考: 我们光有IP地址就可以完成通信了嘛? 想象一下发qq消息的例子, 有了IP地址能够把消息发送到对方的机器上, 但是还需要有一个其他的标识来区分…

完成系统支持Github三方登录

文章目录 1、需求2、在对接系统中完成客户端注册3、创建客户端应用4、CommonOAuth2Provider SpringSecurity OAuth2.0文档&#xff1a; https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html 1、需求 对接Github&#xff0c;在自己系统实现支持Githu…

【C#语言入门】22. 接口、依赖反转、单元测试

【C#语言入门】22. 接口、依赖反转、单元测试 一、接口与单元测试 接口的产生&#xff1a;自底向上&#xff08;重构&#xff09;&#xff0c;自顶向下&#xff08;设计&#xff09;C#中接口的实现&#xff08;隐式&#xff0c;显式&#xff0c;多接口&#xff09;语言对面向…

【力扣hot100】49. 字母异位词分组

题目 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”,…

osgEarth学习笔记4-第一个OsgEarth QT程序

原文链接 使用QT Creator新建一个窗口项目。 编辑pro文件 QT core gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 DEFINES QT_DEPRECATED_WARNINGS #DEFINES QT_DISABLE_DEPRECATED_BEFORE0x060000 # disables all the APIs deprecated bef…

前后端分离项目部署服务器教程--实践成功

文章目录 项目介绍流程1租界云服务2通过远程软件连接服务器3部署前后端代码停止功能文件 环境配置1.安装jdk2.安装Nginx3.安装mysql数据库 花了将近一天部署前后端的项目&#xff0c;写一个日志记录一下&#xff0c;话说孰能生巧。明天把服务器恢复初始在部署一下。 项目介绍 …

【已解决】在pycharm终端无法激活conda环境,但在cmd命令行中可以

一、问题描述 在windows下winr启动cmd命令行&#xff0c;可以成功运行conda命令并且激活环境在pycharm中打开Terminal终端&#xff0c;发现无法运行conda和pip命令&#xff0c;报错环境无法激活 无法在管道中间运行文档: D:\software\Anaconda3\condabin\conda.bat。 所在位置…

Matlab|基于改进粒子群算法的混合储能系统容量优化

目录 主要内容 部分程序 下载链接 主要内容 为了调高风光互补发电储能系统的经济性&#xff0c;减少其运行费用&#xff0c;研究风光互补发电储能系统的容量优化配置模型&#xff0c;探讨粒子群算法的改进及混合储能容量优化方法。首先通过对全生命周期费用静态模型…

全身动作捕捉设备Dreamscap X1,赋予影视、游戏动画全新创作体验

在影视动画、游戏动画制作领域&#xff0c;全身动作捕捉设备具有完整的动作捕捉性能捕获&#xff0c;无需关键帧动画技能&#xff0c;也可以捕捉真人全范围的运动姿态&#xff0c;通过全身动作捕捉设备系统将动作捕捉数据直接流式传输到3D模型上&#xff0c;辅助动画师制作出逼…

【DataWhale学习笔记-蝴蝶书共读】大语言模型背后

从图灵测试到ChatGPT 1950年&#xff0c;艾伦•图灵(Alan Turing)发表论文《计算机器与智能》&#xff08; Computing Machinery and Intelligence&#xff09;&#xff0c;提出并尝试回答“机器能否思考”这一关键问题。在论文中&#xff0c;图灵提出了“模仿游戏”&#xff…

超越标签的探索:K-means与DBSCAN在数据分析中的新视角

最近在苦恼为我的数据决定分组问题&#xff0c;在查找资料时&#xff0c;恰好看到机器学习中的无监督学习的聚类分析&#xff0c;正好适用于我的问题&#xff0c;但是我之前学机器学习时。正好没有学习无监督部分&#xff0c;因为我认为绝大多数问题都是有标签的监督学习&#…

部署Zabbix Agents添加使能监测服务器_Windows平台_MSI/Archive模式

Windows平台 一、从MSI安装Windows代理,添加Windows Servers/PC 概述 可以从Windows MSI安装包(32位或64位) 安装Zabbix agent 32位包不能安装在64位Windows中 所有软件包都支持TLS,配置TLS可选 支持UI和命令行的安装。 1、下载Agent代理程序,使用Agent2升级版,官网链接如…

前端安全——最新:lodash原型漏洞从发现到修复全过程

人生的精彩就在于你永远不知道惊喜和意外谁先来&#xff0c;又是一个平平无奇的早晨&#xff0c;我收到了一份意外的惊喜——前端某项目出现lodash依赖原型污染漏洞。咋一听&#xff0c;很新奇。再仔细一看&#xff0c;呕吼&#xff0c;更加好奇了~然后就是了解和修补漏洞之旅。…

Java基础-泛型

泛型 基本概念为什么我们需要泛型泛型类型泛型类简单泛型类多元泛型类 泛型接口泛型方法为什么要使用泛型方法呢?使用方法 泛型的上下限上限下限加点难度的例子例子一例子二例子三 泛型数组深入理解泛型什么是泛型擦除后保留的原始类型泛型类型擦除原则如何进行擦除的?怎么证…