关于html导出word总结一

总结

测试结果不理想,html-to-docx 和   html-docx-js 最终导出的结果 都 差强人意,效果可以见末尾的附图

环境

 "electron": "24.3.0"

依赖库

html-docx-js

html-docx-js - npm

html-to-docx

html-to-docx - npm

file-saver

file-saver - npm

测试结果

 html-docx-js 

这个库在前端  【我】 无法使用,在用的时候,库本身的代码里需要全局变量 __dirname, 这个在前端浏览器环境好像是没有的,是属于node环境的变量

html-to-docx

这个可以用,但效果不好,最终效果见下方附图,这里附上使用代码,下面的代码文件可以直接使用。


import { saveAs } from 'file-saver'
import HTMLtoDOCX from 'html-to-docx'

const printStyles = `
            @media print {
            body, html {
                margin: 0;
                padding: 0;
            }
            }`

function getHtmlContent(ctrlId) {
    // 获取整个页面的 HTML
    const pageHTML = document.documentElement.outerHTML
    // 使用 DOMParser 解析 HTML
    const parser = new DOMParser()
    const doc = parser.parseFromString(pageHTML, 'text/html')

    // 找到 #printableArea
    const printableArea = doc.querySelector(ctrlId)
    if (!printableArea) return ''

    // 隐藏 #printableArea 以外的所有元素
    doc.body.childNodes.forEach(node => {
        if (node !== printableArea) {
            if (node.style) node.style.visibility = 'hidden'
        }
    })

    // 删除所有 .no-print 元素
    const noPrintElements = printableArea.querySelectorAll('.no-print')
    noPrintElements.forEach(el => el.remove())

    // 获取所有的 style 和 link 标签
    const styles = doc.querySelectorAll('style, link[rel="stylesheet"]')

    return `
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8" />
            <title>Document</title>
            <style>
                ${Array.from(styles).map(style => style.outerHTML).join('\n')}
            </style>
            <style>
                ${printStyles}
            </style>
        </head>
        <body>
            ${printableArea.outerHTML}
        </body>
    </html>
    `
}

/**
 * 这个接口可以把一个 HTML 字符串转成 docx 文件
 * 但经过测试,在某些html页面下,存在导出的 docx 文件无法打开的问题,比如整个页面都是table套table...
 * 通过HTMLtoDOCX导出的word,word内容版式是非常不理想的
 * 先保留这个代码万一以后用得到~
 * @param {*} ctrlId #abc
 */
export const exportWord = async function(ctrlId) {
    const htmlString = getHtmlContent(ctrlId)

    const fileBuffer = await HTMLtoDOCX(htmlString, null, {
        table: { row: { cantSplit: true }},
        footer: true,
        pageNumber: true
    })

    // console.log('fileBuffer', fileBuffer)

    saveAs(fileBuffer, 'html-to-docx.docx')
}

附注

用python把html导出docx

格式错乱,没用

原生table标签导出为xlsx

原网页效果

导出的xlsx效果

效果还行

代码

import FileSaver from 'file-saver'
import * as XLSX from 'xlsx'

function getHtmlContent(ctrlId) {
    // 获取整个页面的 HTML
    const pageHTML = document.documentElement.outerHTML
    // 使用 DOMParser 解析 HTML
    const parser = new DOMParser()
    const doc = parser.parseFromString(pageHTML, 'text/html')

    // 找到 #printableArea
    const printableArea = doc.querySelector(ctrlId)
    if (!printableArea) return ''

    // 隐藏 #printableArea 以外的所有元素
    doc.body.childNodes.forEach(node => {
        if (node !== printableArea) {
            if (node.style) node.style.visibility = 'hidden'
        }
    })

    // 删除所有 .no-print 元素
    const noPrintElements = printableArea.querySelectorAll('.no-print')
    noPrintElements.forEach(el => el.remove())

    return printableArea
}

export const exportExcel = async function(ctrlId) {
    const exportContent = getHtmlContent(ctrlId)

    // console.log(XLSX)

    /* generate workbook object from table */
    // var wb = XLSX.utils.table_to_book(document.querySelector(ctrlId))
    var wb = XLSX.utils.table_to_book(exportContent)

    /* get binary string as output */
    var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
    try {
        FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'sheetjs.xlsx')
    } catch (e) {
        if (typeof console !== 'undefined') { console.log(e, wbout) }
    }
    // return wbout
}

通过pdf转word

导出pdf,通过pdf转word,确实还不错 , 但是pdf里的文字都被截取成图片放到word里了。。

附图

原网页

下图是上面的代码中函数getHtmlContent返回的html保存到html文件后,打开的样子,后面的导出都以   getHtmlContent返回的html  为准

html-to-docx 库导出的docx

第二页就不放了~

导出为pdf

pdf的效果是完美的~

pdf转word

效果非常不错,但其中的每一段文字都是图片,无法编辑

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整清晰版 PDF ,有目录。共 200MB,分为 10 个分卷 PROJECT 2007 宝典 OFFICE2007 OFFICE2010 PROJECT 2007宝典 原价:88.00元 作者:(美)马默 著,安晓梅,范书义 译 出版社:人民邮电出版社 出版日期:2008-1-1 ISBN:9787115167699 字数:1046000 页码:587 -------------------------------------------------------------------------------- 无论是正在为小团队管理一个项目,还是监督一个数百人的协作分配项目,Microsoft Project 2007的强大功能和本书所提供的完善的详细信息,能够使您保持项目顺利进行。从设置预算到分配资源,再到跟踪结果,本书的7个部分按照逻辑顺序详细地介绍了项目管理中的主要元素,您可以从中找到所需的内容。   识别项目的目标和范围;   在企业内和多个位置管理项目;   从甘特图和视图中获得大量信息;   分配任务、检查进度并进行调整;   发布临时报表并查看大图;   使用VBA和VBScri pl创建自定义HTML页面;   导入和导出项目信息。 内容提要 -------------------------------------------------------------------------------- Microsoft Project 2007是流行的基于网络的项目管理软件,在各类项目管理中发挥着巨大的作用。本书全面介绍了Microsoft Project 2007的强大功能和使用方法。首先从项目管理基础入手,然后建立具体的项目,介绍如何改进项目,如何跟踪进度。利用Project做好这些事情之后,就要和团队成员一起协作,处理更复杂的项目,所以本书接着介绍团队协作方面的内容。本书最后的部分介绍如何自定义Project以及宏和VBA的相关信息,并通过一些案例来帮助您了解Project的使用情况。   本书内容丰富,融合了作者大量的实践经验,适用于各类项目管理人员使用。 目录 -------------------------------------------------------------------------------- 第1部分 项目管理基础  第1章 项目的本质    1.1 理解项目     1.1.1 熟悉项目管理     1.1.2 使用项目管理软件管理项目    1.2 项目的生命周期     1.2.1 确定目标和项目的范围     1.2.2 规划     1.2.3 修订     1.2.4 跟踪     1.2.5 从错误中吸取教训    1.3 小结   第2章 熟悉Microsoft Project环境    2.1 初识Project     2.1.1 启动项目     2.1.2 输入信息     2.1.3 更改视图    2.2 Project 2007中的新增功能    2.3 小结  第2部分 推进项目  第3章 创建新项目    3.1 收集信息     3.1.1 确定详细任务     3.1.2 设置时间限制     3.1.3 准备好资源     3.1.4 检查相关性    3.2 打开项目文件     3.2.1 打开项目文件的常规方法     3.2.2 打开或启动项目的其他方法    3.3 建立项目的基本信息    3.4 查看项目日历     3.4.1 设置日历选项     3.4.2 设置日程选项     3.4.3 创建新日历     3.4.4 调整日历    3.5 输入任务    3.6 添加子任务    3.7 保存项目文件     3.7.1 保存文件     3.7.2 将文件保存为模板     3.7.3 保护文件     3.7.4 关闭Project    3.8 在工作中使用项目大纲     3.8.1 在大纲中调整任务     3.8.2 复制任务     3.8.3 显示和隐藏任务    3.9 获取帮助     3.9.1 使用帮助系统     3.9.2 查找联机帮助    3.10 小结   第4章 建立任务    4.1 为任务建立时间安排     4.1.1 固定单位任务     4.1.2 固定工期任务     4.1.3 固定工时任务     4.1.4 投入比导向任务    4.2 为任务分配时间     4.2.1 使用甘特表     4.2.2 使用任务信息对话框     4.2.3 使用鼠标和任务条形图     4.2.4 设置日程选项     4.2.5 为任务分配日历     

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值