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

news2024/11/16 1:51:35

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.coloradmin.cn/o/1527349.html

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

相关文章

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用

MacBook远程桌面Windows使用Microsoft Remote Desktop for Mac_亲测使用 像Windows上有自带的远程桌面连接软件.MacBook没有自带的远程连接Windows桌面的工具,需要安装软件来实现. 像远程桌面控制软件一般有 TeamViewer、向日葵远程控制, ToDesk, Microsoft Remote Desktop f…

Go语言gin框架中加载html/css/js等静态资源

Gin框架没有内置静态文件服务&#xff0c;但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下&#xff1a; 一、gin 框架加载 Html 模板文件的方法 方式1&#xff1a;加载单个或多个html文件&#xff0c;需要指明具体文件名 r.LoadHTMLFiles("vie…

数字创新的引擎:探索Web3的前沿科技和商业模式

随着数字化时代的不断发展&#xff0c;Web3作为下一代互联网的重要组成部分&#xff0c;正逐渐成为数字创新的引擎。本文将深入探讨Web3的前沿科技和商业模式&#xff0c;揭示其在数字创新领域的重要作用和潜力。 1. 区块链技术的革命性 Web3的核心是区块链技术&#xff0c;它…

Flutter-自定义图片3D画廊

效果 需求 3D画廊效果 设计内容 StackGestureDetectorTransformPositioned数学三角函数 代码实现 具体代码大概300行 import dart:math;import package:flutter/material.dart; import package:flutter_xy/widgets/xy_app_bar.dart;import ../../r.dart;class ImageSwitc…

【活动】政府工作报告视角下的计算机行业发展前瞻与策略探讨

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引言正文计算机行业在政府工作报告中的定位与发展态势政策导向解析未来机遇展望…

【uniapp】表单验证不生效的解决方案

表单验证这个常见的功能&#xff0c;明明在element ui等框架已经用的很熟了&#xff0c;在uniapp开发时还是处处碰壁&#xff1f;这篇文章我会提示uni-forms表单验证的几个注意点&#xff0c;帮助大家排查。 示例 下面是一份包含普通验证和自定义验证的示例&#xff1a; <…

vsto excel 插件注册表属性值含义

在 VSTO (Visual Studio Tools for Office) 中&#xff0c;LoadBehavior 是用于指定 Office 插件加载行为的一个属性。具体含义如下&#xff1a; - LoadBehavior 0&#xff1a;此值表示插件已被禁用&#xff0c;将不会加载。 - LoadBehavior 1&#xff1a;此值表示插件将在 O…

Sentinel基础使用

1. 概念解释 限流&#xff1a;对并发访问进行限速。限流的一些行为&#xff1a; 1. 拒绝服务&#xff1a;将多余的请求直接拒绝掉2.服务降级&#xff1a;降级甚至关闭后台的某些服务3.特权请求&#xff1a;在多租户或者对用户进行分级时&#xff0c;考虑让特权用户进行访问4.延…

osgEarth学习笔记2-第一个Osg QT程序

原文链接 上个帖子介绍了osgEarth开发环境的安装。本帖介绍我的第一个Osg QT程序。 下载 https://github.com/openscenegraph/osgQt 解压&#xff0c;建立build目录。 使用Cmake-GUI Configure 根据需要选择win32或者x64&#xff0c;这里我使用win32. 可以看到include和lib路…

C语言数据结构与算法笔记(排序算法)

排序算法 基础排序 冒泡排序 核心为交换&#xff0c;通过不断进行交换&#xff0c;将大的元素一点一点往后移&#xff0c;每一轮最大的元素排到对应的位置上&#xff0c;形成有序。 设数组长度为N&#xff0c;过程为: 共进行N轮排序每一轮排序从数组的最左边开始&#xff0…

云原生(三)、Docker网络

Docker网络 在 Docker 中&#xff0c;不同容器之间的网络访问原理取决于容器所使用的网络模式。下面是 Docker 中常见的两种网络模式下容器间网络访问的原理&#xff1a; 桥接模式&#xff08;Bridge&#xff09;&#xff1a; 在桥接模式下&#xff0c;Docker 使用 Linux 桥接…

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…

Jenkins实现CICD(3)_Jenkins连接到git

文章目录 1、如何完成上述操作&#xff0c;并且不报如下错&#xff1a;2、连接不上git&#xff0c;操作如下&#xff1a;3、将上边产生的3个文件拷贝到&#xff1a;C:\Windows\System32\config\systemprofile\.ssh4、新建下图凭证&#xff1a;创建步骤&#xff1a; 5、公钥填到…

OpenCV 新版滴 4.5.1 发布啦!

发布亮点&#xff1a; OpenCV Github 项目终于突破50000 stars&#xff01;新的里程碑~ 这次发布的特性包括&#xff1a; 集成更多的GSoC 2020 项目的结果&#xff0c;包括&#xff1a; 开发了OpenCV.js DNN 模块&#xff0c;以方便再网页中使用&#xff0c;并提供了相关教…

基于yolov2深度学习网络的人脸检测matlab仿真,图像来自UMass数据集

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 网络架构与特征提取 4.2 输出表示 4.3损失函数设计 4.4预测阶段 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载…

浏览器架构的温故知新

【引子】前端可能是一个日新月异的领域&#xff0c;我们很难了解其中的方方面面。但是&#xff0c;前端系统一般都以浏览器作为运行环境&#xff0c; 对浏览器的进一步理解有助于我们更好地开发前端应用。这也是本文的由来之一&#xff0c;也作为对runtime的一次实例分析。 浏览…

全国各省市县统计年鉴/中国环境统计年鉴/中国工业企业数据库/中国专利数据库/污染排放数据库

统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴&#xff0c;则是研究者常用的途径。目前国…

Web3 之力:探索去中心化技术的创新应用

在当今数字化时代&#xff0c;随着区块链技术的发展和应用&#xff0c;Web3作为其重要组成部分&#xff0c;正在逐渐改变着我们对于互联网和数字经济的认知与体验。Web3不仅是一种技术革新&#xff0c;更是一种新的思维范式&#xff0c;其去中心化的特点为数字世界带来了更多的…

DOcker搭建Rancher

简介 Rancher 是供采用容器的团队使用的完整软件堆栈。它解决了管理多个Kubernetes集群的运营和安全挑战&#xff0c;并为DevOps团队提供用于运行容器化工作负载的集成工具。 官网地址&#xff1a;https://www.rancher.cn/ 安装 拉取镜像 docker pull rancher/rancher:stab…

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…