前端实现docx格式word文件预览,可以兼容原生、vue2、以及uni-app 项目,详细步骤。

上一篇记录了PDF文件预览功能。这一篇记录下docx文件预览。
核心文件
doc.html

<script src="./build/polyfill.min.js"></script>

<script src="./build/jszip.min.js"></script>

<script src="./build/docx-preview.js"></script>

上一篇记录了PDF文件预览功能。这一篇记录下docx文件预览。 核心文件为`doc.html`,在这个文件中,引入了几个关键的JavaScript文件来实现docx文件的预览功能。首先是`polyfill.min.js`,它的作用是为那些不支持某些现代JavaScript特性的浏览器提供垫片,确保在各种浏览器环境下都能正常运行相关代码,让我们的docx预览功能具备更广泛的兼容性。接着引入的`jszip.min.js`则是用于处理压缩文件的库,因为docx文件本质上是一种基于ZIP格式的压缩文件,通过这个库,我们能够对docx文件内部的结构进行解压缩和解析操作,为后续的内容提取和展示做准备。而`docx-preview.js`无疑是最为核心的部分,它封装了一系列复杂的逻辑,专门用于将解压缩后的docx文件内容转化为可在网页上直观展示的格式。 在实际应用场景中,比如企业内部的文档管理系统,员工需要在网页端快速预览各种docx格式的报告、合同等文件。通过这个基于`doc.html`构建的预览功能,用户只需在页面上点击相应的docx文件链接,后台便会将文件路径传递给前端。前端利用上述引入的JavaScript库,迅速对文件进行处理。`jszip.min.js`首先对docx文件进行解压缩,将其中包含的文本、图片、格式等信息释放出来。然后,`docx-preview.js`发挥作用,它根据文件内部的XML结构,将文本内容按照正确的格式排版,同时处理图片的加载和定位,最终在浏览器页面上呈现出与原始docx文件几乎一致的视觉效果。这不仅方便了用户快速查看文件内容,无需再单独下载和打开本地的办公软件,还提高了工作效率,让文档管理和协作变得更加流畅和便捷。
 

<!DOCTYPE html><html dir="ltr" mozdisallowselectionprint><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"><title>DOCX viewer</title><!-- This snippet is used in production (included from viewer.html) --><link rel="resource" type="application/l10n" href="locale/locale.properties"><script src="./build/polyfill.min.js"></script><script src="./build/jszip.min.js"></script><script src="./build/docx-preview.js"></script><style>.doc-wrapper{padding:0px !important;overflow: auto;width: 100%;}/* 移动端文档样式 */.docx-mobile {max-width: 100vw;          /* 设置最大宽度为视口宽度 */padding: 12px 0 !important;             /* 添加内边距 */font-size: 14px;           /* 缩小字体适应小屏幕 */line-height: 1.5em;        /* 提高行间距以便阅读 */box-sizing: border-box;    /* 确保宽度和边距适配 */overflow-wrap: break-word; /* 自动换行以避免溢出 */}.docx-mobile img {max-width: 100%  !important; /* 图片宽度自动适应屏幕 */height: auto;              /* 高度自动调整,保持比例 */display: block;margin: 10px auto;            /* 给图片上下留空 */}.docx-mobile p, .docx-mobile div {padding:0px !important;max-width: 98%  !important; /* 图片宽度自动适应屏幕 */margin: 0 auto 10px;          /* 段落底部留空,避免内容拥挤 */}.docx-mobile h1, .docx-mobile h2, .docx-mobile h3 {font-size: 1.2em;          /* 缩小标题字体 */font-weight: bold;margin: 0 0 8px;}/* 为底部注释和脚注提供较小的字体 */.docx-mobile .footnote, .docx-mobile .endnote {font-size: 12px;color: gray;}</style></head><body><div class="doc-wrapper"><div id="document-container" ref="filebox"></div></div><script>// 获取 URL 参数中的 'file' 参数值const urlParams = new URLSearchParams(window.location.search);const filePath = urlParams.get('file');if (filePath) {// 如果文件路径存在,尝试加载文件var xhr = new XMLHttpRequest();// 设置请求成功后的回调xhr.onload = function() {if (xhr.status === 200) {// 获取文件的二进制数据var arrayBuffer = xhr.response;console.log('arrayBuffer', arrayBuffer);const container = document.querySelector("#document-container");const docxOptions = Object.assign(docx.defaultOptions, {debug: false,experimental: true,inWrapper:false});const options = {ignoreHeight: true,         // 忽略高度,自动适应容器大小ignoreWidth: true,          // 忽略宽度,防止内容超出屏幕ignoreFonts: true,          // 忽略字体,使用默认网页字体以优化显示效果breakPages: false,          // 不分页,在移动端上不强制分页debug: false,               // 关闭调试模式experimental: false,        // 不使用实验性功能// className: "docx-mobile",   // 设置为特定类名以便移动端样式定制className: "docx-pc",   // 设置为特定类名以便移动端样式定制inWrapper: false,            // 包裹在一个容器中,便于设置样式trimXmlDeclaration: true,    // 去掉 XML 声明ignoreLastRenderedPageBreak: true,  // 忽略最后一个分页符renderHeaders: false,       // 不渲染页眉,节省空间renderFooters: false,       // 不渲染页脚,节省空间renderFootnotes: true,      // 渲染脚注,根据内容决定是否保留renderEndnotes: true,       // 渲染尾注,根据内容决定是否保留useBase64URL: true,         // 使用 Base64 URL 以便图片在移动端加载renderChanges: false,       // 不渲染修订内容,减少页面元素renderComments: false       // 不渲染评论,减少页面元素};console.log('docxOptions is', JSON.stringify(docxOptions))// const docxPreviewInstance = new DocxPreview(arrayBuffer);// docxPreviewInstance.render(document.getElementById('docx-preview-box'));setTimeout( async() => {let res = await docx.renderAsync(arrayBuffer, container, null, options)}, 200)} else {alert('无法加载文件,状态码: ' + xhr.status);}};// 设置请求失败时的回调xhr.onerror = function() {alert('无法加载文件');};// 发起 GET 请求xhr.open('GET', filePath);xhr.responseType = 'blob'; // 指定返回的响应类型为 ArrayBufferxhr.send();} else {alert('没有提供文件路径');}</script></body>
</html>

特别提醒下只能够预览docx文件。
下面是资源地址,欢迎下载。https://download.csdn.net/download/weixin_37742709/90580946?spm=1001.2014.3001.5503

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

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

相关文章

Java中的ArrayList方法

1. 创建 ArrayList 实例 你可以通过多种方式创建 ArrayList 实例&#xff1a; <JAVA> ArrayList<String> list new ArrayList<>(); // 创建一个空的 ArrayList ArrayList<String> list new ArrayList<>(10); // 创建容量为 10 的 ArrayList …

【anaconda下py】

38 https://repo.anaconda.com/archive/Anaconda3-2020.11-Windows-x86.exe 39 https://repo.anaconda.com/archive/Anaconda3-2022.10-Windows-x86_64.exe 310https://repo.anaconda.com/archive/Anaconda3-2023.03-0-Windows-x86_64.exe 历史列表Index of /archive 远程&…

linux--------------进程控制(下)

一、进程等待 1.1 进程等待必要性 子进程退出后&#xff0c;若父进程不管不顾&#xff0c;可能会产生 “僵尸进程”&#xff0c;进而造成内存泄漏。进程一旦变为僵尸状态&#xff0c;即使使用 kill -9 也无法将其杀死&#xff0c;因为无法杀死一个已死的进程。父进程需要了解…

docker 中跑faster-whisper 教程(1050显卡)

之前我本地机器运行faster-whisper 会报错类似 Could not load library libcudnn_ops_infer.so.8github 上也有类似的情况 &#xff1a;https://github.com/SYSTRAN/faster-whisper/issues/516#issuecomment-2785038635 缺少.so.8 文件&#xff0c;我通过以下方式&#xff0c;…

人大金仓数据库dum文件进行备份数据和恢复数据

逻辑备份命令: sys_dump -U SYSTEM -d problem_dev -Fc -f /db_backup/kingbase/dump/problem_dev/problem_dev20240329.dmp用户:SYSTEM 数据库名:problem_dev 格式:自定义格式(-Fc) 输出文件:/db_backup/kingbase/dump/problem_dev/problem_dev20240329.dmp sys_dump…

Java的Selenium元素定位-xpath

xpath其实就是一个path(路径)&#xff0c;一个描述页面元素位置信息的路径&#xff0c;相当于元素的坐标xpath基于XML文档树状结构&#xff0c;是XML路径语言&#xff0c;用来查询xml文档中的节点。 绝对定位 从根开始找--/(根目录)/html/body/div[2]/div/form/div[5]/button缺…

python-Leetcode 65.搜索旋转排序数组

题目&#xff1a; 整数数组nums按升序排列&#xff0c;数组中的值互不相同 在传递给函数之前&#xff0c;nums在预先未知的某个小标K上进行了旋转&#xff0c;使数组变为[nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]&#xff0c;小标从0开始计数。…

学透Spring Boot — 010. 单元测试和Spring Test

系列文章目录 这是CSDN postnull 博客《学透Spring Boot》系列的一篇&#xff0c;更多文章请移步&#xff1a;Postnull - 学透Spring Boot系列文章 文章目录 系列文章目录前言1. 基本概念UT 单元测试TDD 测试驱动开发UT测试框架Mock框架 3. Spring Test为什么要用Spring Test引…

Chrome 135 版本新特性

Chrome 135 版本新特性 一、Chrome 135 版本浏览器更新 ** 1. 第三方托管账户注册迁移到 OIDC 授权码流程** Chrome 135 将账户注册的登录页面从营销网站迁移到动态网站&#xff0c;同时也将 OpenID Connect (OIDC) 的隐式流程迁移到授权码流程。这样做的目的是进一步提升第…

Docker Swarm集群搭建与管理全攻略

文章目录 一、节点准备二、初始化 manager 节点三、管理 swarm 集群中的 worker 节点1、添加 worker 节点2、查看 worker 节点3、删除 worker 节点 四、管理 swarm 集群服务1、创建服务2、查看服务3、删除服务 五、管理 swarm 节点服务1、节点标签管理2、创建服务3、查看服务4、…

离线语音识别 ( 小语种国家都支持)可定制词组

1产品介绍 离线语音模组采用神经网络算法&#xff0c;支持语音识别、自学习等功能。运用此模组将 AI 技 术赋能产品&#xff0c;升级改造出语音操控的智能硬件 ( 例如风扇、台灯、空调、马桶、按摩椅、运 动相机、行车记录仪等 ) 。支持全球多种语言识别&#xff0c;如中文…

Docker与VNC的使用

https://hub.docker.com/r/dorowu/ubuntu-desktop-lxde-vnc 下载nvc 客户端 https://downloads.realvnc.com/download/file/viewer.files/VNC-Viewer-7.12.0-Windows.exe 服务端 docker pull dorowu/ubuntu-desktop-lxde-vnc#下载成功 docker pull dorowu/ubuntu-desktop-l…

Linux系统学习Day0——了解和熟悉Linux系统的远程终端登录和数据传输

一、Windows系统与Linux系统虚拟机通过桥接进行网络连接 &#xff08;一&#xff09;桥接模式 桥接模式是虚拟机网络连接的一种常见方式&#xff0c;其核心原理是通过虚拟网卡将Linux虚拟机与宿主机的物理网卡建立桥接关系&#xff0c;使虚拟机能够直接接入物理网络。在该模式…

【开题报告+论文+源码】基于springboot的农贸菜市场租位管理系统的设计与实现

项目背景与意义 随着信息技术的快速发展和普及&#xff0c;信息化管理已成为各行业提升运营效率和服务质量的重要手段。农贸菜市场作为城市生活的重要组成部分&#xff0c;其管理效率和服务水平直接关系到市民的日常生活体验。传统的农贸菜市场租位管理方式往往存在信息不对称、…

Codecademy—— 交互式编程学习的乐园

一、网站概述 Codecademy 是一家美国在线学习编程知识的网站&#xff0c;它为编程学习者提供了一种全新的学习方式。在如今众多的编程学习平台中&#xff0c;Codecademy 凭借其独特的优势脱颖而出&#xff0c;吸引了全球数百万用户。其目标是帮助更多人轻松学习编程&#xff0…

WEB安全--XSS--DOM破坏

一、前言 继XSS基础篇后&#xff0c;我们知道了三种类型的XSS&#xff0c;这篇文章主要针对DOM型XSS的原理进行深入解析。 二、DOM型XSS原理 2.1、什么是DOM 以一个形象的比喻&#xff1a; 网页就像是一座房子&#xff0c;而 **DOM** 就是这座房子的“蓝图”或者“结构图”。…

Linux系统远程操作和程序编译

Linux系统远程操作和程序编译 了解和熟悉Linux系统的远程终端登录、远程图形桌面访问、 X图形窗口访问和FTP文件传输操作 网络设置和用户创建&#xff1a; 在虚拟机Ubuntu系统中&#xff0c;将网络连接设置为“桥接模式”&#xff0c;并配置好IP和网关。确保其他Windows 10系统…

linux开发环境

1.虚拟机环境搭建 在 Ubuntu 系统中&#xff0c;打开&#xff08;如图中显示的窗口 &#xff09;常见快捷键有&#xff1a; Ctrl Alt T&#xff1a;这是最常用的打开终端的快捷键组合 &#xff0c;按下后会快速弹出一个新的终端窗口。 在 VMware 虚拟机环境中&#xff0c;若…

蓝桥·20264-祝福语--找连续字串的长度

#include <iostream> using namespace std; int main() {// 请在此输入您的代码//最小字典序&#xff0c;一定是全a&#xff0c;找s的最长字串a,结果就是该字串长度加1&#xff08;t不能是s的子串&#xff09;//所以这道题就变成了&#xff0c;找s中字串a出现的长度strin…

7.第二阶段x64游戏实战-分析人物属性

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;6.第二阶段x64游戏实战-分析人物状态 首先打开人物面板&#xff0c;查看人物的…