【JavaScript】关于使用JS对word文档实现预览的一些思考

js在线预览pdf,doc,xls,jpg等文件 由于项目需要,需要在上传文件后在线预览所上传的文件。最开始我的思路就是想到各种插件什么的。比如说pdf.js、pdfobject,但最后都没能达到我所想要的效果。 阅读详情

文章目录

mammoth

官网地址:https://github.com/mwilliamson/mammoth.js#readme

安装mammoth:

npm i mammoth -S

我们可以安装mammoth来实现上传的word文件的在线预览,我们以element的上传组件为示例:

<template>
  <div>
    <el-upload class="upload-demo" drag action="#" :auto-upload="false" :on-change="changeFile">
      <el-icon class="el-icon--upload"><upload-filled /></el-icon>
      <div class="el-upload__text">Drop file here or <em>click to upload</em></div>
      <template #tip>
        <div class="el-upload__tip">jpg/png files with a size less than 500kb</div>
      </template>
    </el-upload>
    <div v-html="wordcontent"></div>
  </div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import type { UploadProps } from 'element-plus'
import mammoth from 'mammoth'

const wordcontent = ref('')

const changeFile: UploadProps['onChange'] = (uploadFile, uploadFiles) => {
  const file = uploadFile.raw
  const myReader = new FileReader()
  myReader.readAsArrayBuffer(file as Blob)
  myReader.addEventListener('loadend', function (e) {
    const buffer = e?.target?.result // arraybuffer object
    mammoth
      .convertToHtml({
        arrayBuffer: buffer
      })
      .then(function (result: { value: string; messages: any[] }) {
        const html = result.value // The generated HTML
        const messages = result.messages // Any mesarnings during conversion
        wordcontent.value = html
      })
      .done()
  })
}
</script>

详细的API参考官网地址。

docx4js

官网地址:https://github.com/lalalic/docx4js

使用docx4js实现获取docx文件有多少页码。

安装docx4js:

npm i docx4js -S

我们新建一个docx.mjs,代码如下:

import docx4js from 'docx4js'
import { TextDecoder } from 'util'

docx4js.docx.load('./test2.docx').then((doc) => {
  const propsAppRaw = doc.parts['docProps/app.xml']._data.getContent()
  const propsApp = new TextDecoder('utf-8').decode(propsAppRaw)
  console.log(propsApp)
  const match = propsApp.match(/<Pages>(\d+)<\/Pages>/)
  if (match && match[1]) {
    const count = Number(match[1])
    console.log(count)
  }
})

执行命令: node docx.mjs

可以在控制台看到打印结果,第一个打印:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Template>Normal.dotm</Template><Pages>4</Pages><Words>996</Words><Characters>1013</Characters><Lines>0</Lines><Paragraphs>0</Paragraphs><TotalTime>0</TotalTime><ScaleCrop>false</ScaleCrop><LinksUpToDate>false</LinksUpToDate><CharactersWithSpaces>1250</CharactersWithSpaces><Application>WPS Office_12.1.0.18543_F1E327BC-269C-435d-A152-05C5408002CA</Application><DocSecurity>0</DocSecurity></Properties>

第二个打印:

4

其中的4表示这个word文档是4页。

但是有时候,有的word文档解析的结果是不一样的,如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ap:Properties xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" xmlns:ap="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"/>

该文件中就没有包含Pages的字段。

所以综上所示,如果通过docx4js获取word文件的页码数量是不准确的,并且需要在node环境中运行,且文件是docx格式的,doc格式的不支持。

Node.js实战:docxtemplater、officegen与adm-zip生成Word文档全解析 在后端开发中,自动化生成Word文档是处理报告、合同等文件的常见需求。其核心原理在于理解.docx文件本质上是基于XML的ZIP压缩包。通过编程方式操作这些XML结构,可以实现文档的动态生成与编辑,从而提升工作效率并保证格式一致性。在Node.js生态中,针对不同场景有相应的技术方案:对于需要严格遵循预设格式的模板填充场景,可选用模板引擎类库;对于需要动态构建文档结构的场景,则需使用API生成类工具。本文将结合**docxtemplater**的模板驱动特性和**adm-zip**的底层文件操作能力,深入探 阅读详情

相关推荐

Vue项目实战:如何用vue-office-docx+print-js实现Word文档完美打印(附避坑指南)

本文详细介绍了在Vue项目中,如何通过整合vue-office-docx与print-js实现Word文档的高质量前端预览与打印。文章深入分析了从.docx格式转换到HTML打印的挑战,提供了完整的实战代码、样式优化方案以及使用iframe沙盒的高级技巧,并附带了详细的避坑指南和性能优化建议,帮助开发者解决样式丢失、分页错乱等常见问题。

weixin_29012765的博客 323

文档在线预览(三)使用js前端实现word、excel、pdf、ppt 在线预览

本文主要介绍了word、excel、pdf、ppt等文件纯前端实现在线预览的方式,从本文的测试情况来看前端实现预览最好的效果还是PDF(或者是图片),不会出现一些文字错乱和乱码的问题,所以一般好的方案就是后端配合将不同格式的文件转换成pdf,转成统一的文件格式,再由前端实现预览效果,这样能保留文件的一些样式的效果,同时前端也只用支持一种文件格式的预览,工作量也能大大降低。

fhey的博客 5万+

Vue3办公文件预览实战:5分钟搞定Word/Excel/PPT在线查看(附完整代码)

本文详细介绍了如何在Vue3项目中快速集成Word、Excel和PPT等办公文件的在线预览功能。通过使用vue-office全家桶,开发者可以在5分钟内搭建起完整的预览组件,并支持处理大文件、样式定制和错误降级等高级需求。文章提供了完整的代码示例和实战优化技巧,帮助前端开发者高效实现文档预览功能。

weixin_29008055的博客 350

vue+element实现word文档(转成markdown了)带目录预览

vue展示word带目录

木子的博客 7563

Vue前端导出Word文档全攻略:HTML转换与模板填充方案深度解析

在Web开发中,数据导出是提升用户体验的关键功能。Word文档因其强大的可编辑性,在需要二次修改或作为模板分发的场景下,具有不可替代的优势。其原理在于,前端需要将DOM结构或数据转换为Word可识别的格式,通常涉及对.docx文件(一种基于XML的ZIP压缩包)的操作。这项技术的核心价值在于,它能将网页中的动态内容无缝转换为可离线编辑、打印的专业文档,极大地提升了企业级应用(如OA系统、报表平台、合同管理系统)的专业度和工作效率。目前,Vue生态中主要有两大技术路线:一是基于HTML转换的“模拟法”,利用h

weixin_33976326的博客 281

网页版 deepseek 对话问答内容导出为 PDF 文件和 Word 文件的浏览器插件下载安装和使用说明

支持 deepseek 对话内容为另存为 PDF 文文件;支持 deepseek 对话内容保存下载为 Word 文档文件;支持 deepseek 回答内容区域的编程代码语法高亮显示;支持 deepseek 对话内容、思考内容和回答内容样式区分显示;支持 deepseek 回答内容区域的表格样式显示斑马条纹样式;支持 deepseek 回答内容区域的有序列表和无序列表样式布局规整,不错乱;

追梦&天空的博客 3122

3分钟掌握的文档转换神器:Mammoth.js全攻略

### 1.1 什么是Mammoth.js? `Mammoth.js`是一个轻量级JavaScript库,专注于将`.docx`文档高效转换为HTML、Markdown或纯文本格式。它采用模块化架构设计,支持浏览器和Node.js双环境运行,特别适合需要处理文档转换的开发者和企业用户。项目采用BSD-2-Clause开源许可证,允许商业和非商业自由使用。 ### 1.2 核心优势解析 | 特性

gitblog_00247的博客 1046

纯前端文档预览技术解析:从原理到Vue组件化实践

文档预览是现代Web应用中的常见需求,其核心原理在于将不同格式的文档(如PDF、Office文件)在浏览器端解析并渲染为可视化内容。传统方案依赖后端服务进行格式转换,存在延迟、安全和架构复杂等问题。纯前端预览技术通过集成pdf.js、Mammoth.js、SheetJS等开源库,直接在浏览器中处理文档解析,实现了数据不出前端、即时预览的技术价值。该技术特别适用于对数据安全敏感、追求架构轻量的SaaS平台、在线教育、企业内部系统等场景。本文以Vue组件化实践为例,深入探讨了如何封装统一易用的预览组件,并针对性

weixin_34021089的博客 529

如何在浏览器端零依赖生成Word文档?DOCX.js实战指南

**DOCX.js**是一个纯客户端JavaScript库,能够在前端环境中直接生成Microsoft Word DOCX格式文档,无需后端服务器支持。对于需要实时生成报表、合同、表单等业务场景,这款工具能够显著提升用户体验并降低服务器负载。本文将深度解析DOCX.js的核心功能、实战应用场景以及高级优化技巧。 --- ## 一、核心痛点:为什么需要前端文档生成方案? 传统文档生成方案通常依

gitblog_00401的博客 31

docx4js:一个javascript docx解析器

docx4js *请注意,3.x与2.x完全不同,一切都在不断变化。 *请注意,2.x与1.x完全不同,一切都在不断变化。 docx4js是一个javascript docx解析器。 最初的目标是支持docx,pptx和xlsx,但这是一项巨大的工作,因此到目前为止,我仅限于docx。 为了性能起见,实现不保留已解析的结构。 它仅遍历docx内容,并标识docx模型,然后一个个地调用通过的访问者。 无论内容和样式如何,都具有相同的策略。 这种方法可以用更少的内存完成更多的工作。 docx中有很多信息,但是客户端应用程序通常只关心其中的一部分,例如仅内容,仅结构,某些样式或某些属性。 客户端应用程序能够按TYPE处理特殊的单词模型。 单词模型的属性通常会影响样式,但是我不了解所有样式,因此我懒于仅迭代每个属性和一些未知的子元素,因此客户端应用程序可以捕获您所知道的所有信息。 从

js打开word文档预览操作示例【不是下载】

本文实例讲述了js打开word文档预览操作。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> [removed] function openmydoc(path) { var doc = new ActiveXObject("Word.Application"); doc.visible = true; doc.Documents.Open(path); } [removed] </head> <body> <

扩散模型嵌入PDF:用JavaScript在文档内实现图像生成

模型压缩是机器学习工程落地中的关键环节,尤其在边缘设备或受限运行时中,如何让模型高效推理是开发者关注的重点。扩散模型作为图像生成的主流方法,通常依赖GPU和高算力,但在极致压缩后,其推理过程也能被完整封装进一个PDF文件。这一实现依赖于PDF标准内置的JavaScript能力,通过文档脚本执行矩阵运算与多步去噪循环,在无Python环境、无外部权重文件的条件下直接生成图像。该思路不仅展示了文档格式作为计算容器的潜力,也为模型压缩、量化与运行时适配提供了极端案例。对于文档开发工程师,它打开了交互式文档的新可能

weixin_30680385的博客 279

AI大模型驱动Web UI自动化测试:Playwright与RobotFramework智能整合实践

Web自动化测试是软件质量保障的关键环节,其核心原理是通过脚本模拟用户操作,对Web应用界面进行功能验证。传统方法依赖固定的元素定位和脚本逻辑,在应对频繁的UI变更时面临维护成本高、脚本脆弱的挑战。随着AI大模型技术的发展,其强大的自然语言理解和代码生成能力为自动化测试带来了新的技术价值。通过将大模型的意图理解与代码生成能力,与Playwright强大的浏览器自动化执行引擎以及RobotFramework灵活的关键字驱动框架相结合,可以构建出能够理解自然语言指令、动态生成稳定操作脚本的智能测试系统。这种融合

weixin_28718769的博客 410

freeCodeCamp JavaScript 认证实战:用原生 HTML/CSS/JS 从零构建罗马数字转换器(Build a Roman Numeral Converter)

本文以 freeCodeCamp 开源仓库中的 JavaScript 算法与数据结构(JavaScript Algorithms and Data Structures)认证项目规范文档为主线,完整拆解「Build a Roman Numeral Converter」这一项目式挑战:从 11 条用户故事、13 条 DOM 级自动化验收测试,到官方参考实现的 HTML 结构与贪心转换算法逐行精讲。读

gitblog_00810的博客 394

WRF移动嵌套结合伏羲模型与CFD(PALM)高精度多尺度降尺度分析研究

WRF移动嵌套(Moving Nesting):动态调整高分辨率嵌套网格位置,追踪天气系统(如台风、强对流系统)以提高局地预报精度。伏羲(Fuxi)模型:国产数值模式,提供对WRF模拟的初始及边界条件优化。CFD(Computational Fluid Dynamics)PALM模型:精细化局地流场、湍流、温度分布。

m0_57411304的博客 1710

E-SMILES:化学信息学中的分子表示革命与应用

分子表示是化学信息学和计算化学的基础技术,其核心是将复杂的分子结构转化为计算机可处理的数字化形式。传统SMILES格式虽然广泛应用,但在处理复杂化学体系时存在局限性。Extended SMILES(E-SMILES)通过扩展语法规则,支持立体化学、配位键等特殊结构的精确描述,显著提升了分子表示的准确性和适用范围。在药物研发中,E-SMILES能准确描述蛋白质-配体相互作用和共价抑制剂;在材料科学领域,它支持纳米材料和超分子体系的多尺度建模。结合机器学习等前沿技术,E-SMILES正在推动化学信息处理效率的革

weixin_28683165的博客 279

企业报表自动化:docx.js实战案例解析

最近接手了一个企业周报自动化的需求,用docx.js实现了从数据到Word文档的全流程转换。这个过程中踩了不少坑,也积累了一些实战经验,分享给有类似需求的同学参考。整个开发过程最深的体会是:自动化报表看似简单,但要做出专业效果需要处理大量细节。docx.js虽然学习曲线平缓,但要充分发挥其能力还是需要仔细研究文档。来快速验证这类文档生成项目,它的在线编辑环境可以免去本地配置的麻烦。对于需要部署为服务的场景,平台的一键部署功能也很省心。我测试时发现从代码到可访问的在线服务,整个过程不到2分钟。

EmeraldEagle36的博客 268

分享一个完整的KANO问卷(包含正反问题和选项设置)

本文介绍了KANO模型问卷的设计与应用,用于评估功能需求优先级。问卷包含基本信息、功能评估(正反问题设计)、界面评估及开放问题,选项定义明确(如"非常喜欢"到"很不喜欢")。数据清洗规则包括剔除矛盾回答和注意力检验。通过量化编码和矩阵分析,将需求分为魅力型、期望型、必备型等类别。示例数据显示健康监测为必备型(72%),电子围栏为期望型(45%),适老化改造为无差异型(38%)。该模型为产品决策提供客观量化依据。

从技术实践立足,从项目管理方法论延伸思考 1794

百度UEditor实现Word带图表格稳定导入:基于mammoth.js的完整方案

在金融风控、政企办公等场景中,富文本编辑器常被用于在线文档的编辑与留痕。当业务人员需要将本地Word报告中的图片、表格和文字完整地迁移到网页端时,传统的复制粘贴往往导致图片丢失、表格错乱。Word转HTML的解析原理,是通过读取docx的底层XML结构,将其映射为干净的HTML标签,再由富文本编辑器承接渲染。这一技术路径不仅解决了格式还原问题,还能通过前端与服务的配合实现图片的独立上传与存储,保障数据可追溯。在实际工程中,基于mammoth.js的前端解析方案,配合自定义样式清洗与表格修复,能够稳定应对授信

weixin_34301132的博客 238

微信小程序 - 解决报错 {“errcode“:41002,“errmsg“:“appid missing, rid: X“} 微信报错错误码errcode“:41002问题分析及解决教程(详细排查)

【微信小程序】报错{“errcode“:41002,“errmsg“:“appid missing, rid: 64e55770-67c1fb7e-027c5a70“}:【微信小程序】微信小程序登录请求出现appid missing提示,微信公众号{"errcode":41002,"errmsg":"appid missing"},微信 报错{“errcode“:41002,“errmsg“:“appid missing,微信小程序获取openid返回appid missing的问题,微信小程序提示Erro

🏆 前端领域优质创作者 5647

手把手教你学simulink(57.3)--电励磁同步电动机场景示例:基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机

目录基于Simulink的自适应控制(Adaptive Control)电励磁同步电动机项目实例1. 项目背景2. 系统架构2.1 电励磁同步电动机模型2.2 三相逆变器模型2.3 自适应控制器(Adaptive Controller)2.4 系统框图3. 模型设计3.1 创建Simulink模型3.2 自适应控制(Adaptive Control)设计3.3 仿真环境搭建4. 参数优化4.1 自动调优5. 实际应用案例5.1 工业驱动系统5.2 风力发电系统6. 结论需求分析电励磁同步电动机(Electr

MHD0815的博客 503

VS Code Office Viewer:一体化开发环境中的办公文件预览解决方案,提升40%开发效率

在开发工作流中频繁切换VS Code和办公软件严重影响工作效率。VS Code Office Viewer插件通过集成PDF、Excel、Word等办公文件预览功能,配合强大的Markdown所见即所得编辑器和API调试工具,让开发者在一个环境中完成文档编写、数据处理和接口测试,实现真正的开发办公一体化。 ## 开发者的痛点:频繁上下文切换降低生产力 > 传统开发工作流中,开发者需要同时维护代

gitblog_00001的博客 993

Android So加载机制分析----基于Android14源码

本文深入分析Android 14系统中SO(共享库)的两种加载机制:System.loadLibrary()和System.load()。前者通过ClassLoader查找标准路径加载,后者直接加载指定路径的SO文件。文档详细追踪了从Java层到动态链接器的完整加载链路,包括ClassLoader路径查找、JNI桥接、ART虚拟机处理以及底层linker的符号解析和重定位过程。同时还分析了Namespace隔离、JNI_OnLoad机制等核心内容,为开发者提供全面的SO加载技术解析和问题排查指南。

保持专注,保持热爱 349

基于Vue3与iframe沙盒构建实时HTML/CSS/JS预览工具

在前端开发领域,实时预览工具通过将代码编辑与效果渲染无缝衔接,极大提升了开发效率与创意验证速度。其核心原理是利用iframe沙盒技术实现安全隔离,结合防抖机制优化性能,构建出响应式的代码编辑与渲染环境。这类工具的技术价值在于缩短了从构思到实现的反馈循环,让开发者能够即时看到HTML、CSS和JavaScript代码的渲染结果,无需频繁切换上下文。在实际应用场景中,它特别适用于快速原型设计、CSS新特性实验、AI生成代码验证以及团队间的交互效果沟通。本文以开源项目html-anything为例,深入解析了如何

weixin_34054931的博客 313

12、多端神经形态晶体管:原理、应用与算法探索

本文综述了多端神经形态晶体管的原理、应用与算法探索。从神经元MOS晶体管的发展到基于电解质栅极晶体管(EGT)的新型器件设计,系统阐述了其在低电压、多功能逻辑运算和突触行为模拟方面的优势。重点介绍了其在化学生物传感器(如多巴胺和pH检测)中的高灵敏度应用,以及在树突整合、时空总和、动态逻辑和神经元算术等树突算法中的实现。文章还总结了该类器件在神经形态计算、智能传感等领域的广阔前景,并分析了当前面临的材料工艺、理论建模与系统集成挑战,展望了未来发展方向。

delta的博客 143

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 【JavaScript】JavaScript同步任务、异步任务(宏任务和微任务)
下一篇: 【代码练习】javaScript任务执行的洋葱模型
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值