前端實現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.pswp.cn/bicheng/76122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76122.shtml
英文地址,請注明出處:http://en.pswp.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;查看人物的…