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

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

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

一、安裝依賴

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

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

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

場景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;

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

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

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

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

export default DocxPreview;

場景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('文件請求失敗');

        // 將響應(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;

三、高級配置:自定義渲染效果

renderAsync 方法的第三個參數(shù)是配置對象,可自定義樣式、忽略部分內(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, // 是否忽略最后一個分頁符
  experimental: false, // 是否啟用實驗性功能
  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 會帶有基礎(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;
}

五、注意事項

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

    小程序登錄是現(xiàn)在小程序里面很普遍的一個功能,因為官方提供的方法,可以一鍵獲取到用戶信息,一鍵拿到手機(jī)號,這篇文章主要給大家介紹了關(guān)于微信小程序如何同時獲取用戶信息和用戶手機(jī)號的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 微信小程序選擇圖片控件

    微信小程序選擇圖片控件

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

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

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

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

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

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

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

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

    最近遇到一個h5手寫簽名的需求,按理說這種功能網(wǎng)上隨便一搜一大把現(xiàn)成的源碼和組件,但是像這種比較經(jīng)典又很簡單的功能,還是要弄清楚到底怎么實現(xiàn)的,所以接下來本文就給大家介紹一下如何用canvas實現(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

最新評論

泸州市| 定边县| 天气| 拜泉县| 资兴市| 兴隆县| 葫芦岛市| 定陶县| 商洛市| 秦安县| 克拉玛依市| 西安市| 敦煌市| 锦屏县| 休宁县| 卢龙县| 贺兰县| 花莲县| 巴中市| 金寨县| 嘉定区| 闽侯县| 五寨县| 雅安市| 广灵县| 石阡县| 隆化县| 巴塘县| 唐山市| 隆子县| 广东省| 宕昌县| 邳州市| 陆河县| 大丰市| 堆龙德庆县| 商河县| 定边县| 崇礼县| 辽源市| 太湖县|