最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript使用docx-preview實(shí)現(xiàn)word文檔預(yù)覽的完整步驟

 更新時(shí)間:2025年11月11日 10:12:32   作者:代碼搬運(yùn)媛  
docx-preview 是一個(gè)輕量級(jí)的 JavaScript 庫,用于在瀏覽器中預(yù)覽 Word 文檔(.docx),無需后端轉(zhuǎn)換,它通過直接解析 .docx 的 XML 結(jié)構(gòu),在前端渲染為 HTML 展示,以下是在項(xiàng)目中實(shí)戰(zhàn)使用的完整步驟,需要的朋友可以參考下

一、安裝依賴

首先安裝 docx-preview 核心庫,以及可能需要的輔助庫(如處理文件讀取的 file-saver 可選):

bash npm install docx-preview --save 
# 或 
yarn add docx-preview 

二、基礎(chǔ)使用:預(yù)覽本地/遠(yuǎn)程 .docx 文件

場(chǎng)景1:預(yù)覽本地上傳的 Word 文件

通過 <input type="file"> 讓用戶上傳 .docx 文件,解析后預(yù)覽:

import React, { useRef } from 'react';
import { renderAsync } from 'docx-preview';

const DocxPreview = () => {
  const previewRef = useRef(null); // 用于掛載預(yù)覽內(nèi)容的容器

  // 處理文件上傳
  const handleFileChange = async (e) => {
    const file = e.target.files[0];
    if (!file) return;

    // 驗(yàn)證文件類型
    if (file.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') {
      alert('請(qǐng)上傳 .docx 格式的文件');
      return;
    }

    try {
      // 清空之前的預(yù)覽內(nèi)容
      previewRef.current.innerHTML = '';

      // 解析并渲染 Word 文檔
      await renderAsync(
        file, // 上傳的文件對(duì)象
        previewRef.current, // 掛載預(yù)覽的 DOM 容器
        null, // 配置項(xiàng)(可選)
        {
          // 加載狀態(tài)回調(diào)(可選)
          onLoadStart: () => console.log('開始加載...'),
          onLoadEnd: () => console.log('加載完成'),
        }
      );
    } catch (err) {
      console.error('解析失?。?, err);
      previewRef.current.innerHTML = '文檔解析失敗,請(qǐng)檢查文件是否損壞';
    }
  };

  return (
    <div>
      <input type="file" accept=".docx" onChange={handleFileChange} />
      <div ref={previewRef} style={{ marginTop: 20, minHeight: 300 }} />
    </div>
  );
};

export default DocxPreview;

場(chǎng)景2:

預(yù)覽遠(yuǎn)程服務(wù)器上的 .docx 文件 通過 fetch 拉取遠(yuǎn)程 .docx 文件(需處理跨域),轉(zhuǎn)換為 ArrayBuffer 后解析:

import React, { useRef, useEffect } from 'react';
import { renderAsync } from 'docx-preview';

const RemoteDocxPreview = () => {
  const previewRef = useRef(null);
  const docUrl = 'https://example.com/files/test.docx'; // 遠(yuǎn)程 .docx 地址

  useEffect(() => {
    const fetchAndRenderDoc = async () => {
      try {
        const response = await fetch(docUrl);
        if (!response.ok) throw new Error('文件請(qǐng)求失敗');

        // 將響應(yīng)轉(zhuǎn)換為 ArrayBuffer(docx-preview 支持的格式)
        const arrayBuffer = await response.arrayBuffer();

        // 渲染文檔
        await renderAsync(arrayBuffer, previewRef.current);
      } catch (err) {
        console.error('加載失?。?, err);
        previewRef.current.innerHTML = '無法加載遠(yuǎn)程文檔';
      }
    };

    fetchAndRenderDoc();
  }, [docUrl]);

  return <div ref={previewRef} style={{ padding: 20 }} />;
};

export default RemoteDocxPreview;

三、高級(jí)配置:自定義渲染效果

renderAsync 方法的第三個(gè)參數(shù)是配置對(duì)象,可自定義樣式、忽略部分內(nèi)容等:

// 示例:自定義配置
const options = {
  className: 'docx-preview', // 給預(yù)覽容器添加自定義類名(用于覆蓋樣式)
  inWrapper: true, // 是否包裹在默認(rèn)容器中(默認(rèn) true)
  ignoreWidth: false, // 是否忽略文檔寬度(默認(rèn) false)
  ignoreHeight: false, // 是否忽略文檔高度(默認(rèn) false)
  ignoreFonts: false, // 是否忽略字體樣式(默認(rèn) false)
  breakPages: true, // 是否分頁(默認(rèn) true)
  ignoreLastRenderedPageBreak: true, // 是否忽略最后一個(gè)分頁符
  experimental: false, // 是否啟用實(shí)驗(yàn)性功能
  trimXmlDeclaration: true, // 是否移除 XML 聲明
  useBase64URL: true, // 是否用 base64 處理圖片
  renderChanges: false, // 是否渲染修訂記錄(默認(rèn) false)
  renderHeaders: true, // 是否渲染頁眉(默認(rèn) true)
  renderFooters: true, // 是否渲染頁腳(默認(rèn) true)
  renderFootnotes: true, // 是否渲染腳注(默認(rèn) true)
  renderEndnotes: true, // 是否渲染尾注(默認(rèn) true)
};

// 使用配置
await renderAsync(file, previewRef.current, options);

四、樣式定制 默認(rèn)渲染的 HTML 會(huì)帶有基礎(chǔ)樣式,可通過自定義 CSS 覆蓋:

/* 示例:調(diào)整預(yù)覽區(qū)域樣式 */
.docx-preview {
  max-width: 800px;
  margin: 0 auto;
  padding: 40px;
  background: white;
  box-shadow: 0 0 10px rgba(0,0,0,0.1);
}

/* 調(diào)整段落樣式 */
.docx-preview p {
  margin: 10px 0;
  line-height: 1.5;
}

/* 隱藏頁眉頁腳(如果需要) */
.docx-preview .header,
.docx-preview .footer {
  display: none;
}

五、注意事項(xiàng)

  1. 文件格式限制:僅支持 .docx(Office 2007+),不支持 .doc(舊版二進(jìn)制格式),如需支持 .doc 需后端轉(zhuǎn)換(如用 libreofficepoi)。
  2. 跨域問題:預(yù)覽遠(yuǎn)程文件時(shí),服務(wù)器需配置 CORS 允許前端域名訪問,否則會(huì)報(bào)跨域錯(cuò)誤。
  3. 復(fù)雜格式兼容性:對(duì)復(fù)雜表格、公式、特殊符號(hào)的渲染可能存在偏差,復(fù)雜場(chǎng)景建議結(jié)合后端轉(zhuǎn)換為 PDF 預(yù)覽。
  4. 性能:大文件(如超過 10MB)可能導(dǎo)致渲染緩慢,建議前端限制文件大小或后端分片處理。

以上就是JavaScript使用docx-preview實(shí)現(xiàn)word預(yù)覽的完整步驟的詳細(xì)內(nèi)容,更多關(guān)于JavaScript docx-preview預(yù)覽word的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript實(shí)現(xiàn)頁面高亮操作提示和蒙板

    JavaScript實(shí)現(xiàn)頁面高亮操作提示和蒙板

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)頁面高亮操作提示和蒙板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 使用JavaScript實(shí)現(xiàn)等比縮放的幾種常見方法

    使用JavaScript實(shí)現(xiàn)等比縮放的幾種常見方法

    這篇文章主要介紹了如何使用JavaScript對(duì)HTML中的元素和任意DOM元素進(jìn)行等比縮放,通過獲取容器或元素的尺寸信息,計(jì)算縮放比例,并應(yīng)用CSS變換(transform屬性)來實(shí)現(xiàn)等比縮放,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • js如何去除數(shù)組中的empty?undefined空項(xiàng)

    js如何去除數(shù)組中的empty?undefined空項(xiàng)

    這篇文章主要介紹了js如何去除數(shù)組中的empty?undefined空項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 微信小程序如何同時(shí)獲取用戶信息和用戶手機(jī)號(hào)

    微信小程序如何同時(shí)獲取用戶信息和用戶手機(jī)號(hào)

    小程序登錄是現(xiàn)在小程序里面很普遍的一個(gè)功能,因?yàn)楣俜教峁┑姆椒?可以一鍵獲取到用戶信息,一鍵拿到手機(jī)號(hào),這篇文章主要給大家介紹了關(guān)于微信小程序如何同時(shí)獲取用戶信息和用戶手機(jī)號(hào)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 微信小程序選擇圖片控件

    微信小程序選擇圖片控件

    這篇文章主要為大家詳細(xì)介紹了微信小程序選擇圖片控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • js阻止瀏覽器默認(rèn)行為的簡(jiǎn)單實(shí)例

    js阻止瀏覽器默認(rèn)行為的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄猨s阻止瀏覽器默認(rèn)行為的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript實(shí)現(xiàn)將毫秒數(shù)轉(zhuǎn)換為易讀時(shí)長(zhǎng)格式

    JavaScript實(shí)現(xiàn)將毫秒數(shù)轉(zhuǎn)換為易讀時(shí)長(zhǎng)格式

    在許多開發(fā)場(chǎng)景中,我們通常需要將后端接口返回的毫秒數(shù)轉(zhuǎn)換成更易讀的時(shí)長(zhǎng)格式,本文將封裝一個(gè)簡(jiǎn)潔的 JavaScript 函數(shù)實(shí)現(xiàn)這一功能,需要的可以了解下
    2025-02-02
  • bootstrap手風(fēng)琴折疊示例代碼分享

    bootstrap手風(fēng)琴折疊示例代碼分享

    這篇文章主要為大家詳細(xì)介紹了bootstrap手風(fēng)琴折疊示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JavaScript使用canvas實(shí)現(xiàn)手寫簽名功能

    JavaScript使用canvas實(shí)現(xiàn)手寫簽名功能

    最近遇到一個(gè)h5手寫簽名的需求,按理說這種功能網(wǎng)上隨便一搜一大把現(xiàn)成的源碼和組件,但是像這種比較經(jīng)典又很簡(jiǎn)單的功能,還是要弄清楚到底怎么實(shí)現(xiàn)的,所以接下來本文就給大家介紹一下如何用canvas實(shí)現(xiàn)手寫簽名功能
    2023-08-08
  • javascript刪除html標(biāo)簽函數(shù)cIsHTML

    javascript刪除html標(biāo)簽函數(shù)cIsHTML

    這篇文章主要介紹了javascript刪除html標(biāo)簽函數(shù)cIsHTML,需要的朋友可以參考下
    2017-01-01

最新評(píng)論

南和县| 馆陶县| 如皋市| 五峰| 贵溪市| 固始县| 泸西县| 邢台市| 拜城县| 乌鲁木齐县| 辉县市| 龙岩市| 永清县| 读书| 白银市| 铜鼓县| 元谋县| 十堰市| 伊金霍洛旗| 汉寿县| 镇沅| 新源县| 类乌齐县| 鄂托克旗| 汉中市| 都昌县| 宁陕县| 舒城县| 神木县| 绥化市| 始兴县| 特克斯县| 宿迁市| 炎陵县| 商南县| 汾西县| 伊春市| 漳浦县| 韶关市| 米易县| 玉树县|