国产高清在线免费观看-国产高清在线免费无码-国产高清在线男人的天堂-国产高清在线视频-国产高清在线视频精品视频-国产高清在线视频伊甸园

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

做Docx在線WEB瀏覽器預(yù)覽,一定要做docx-preview和mammoth這兩個(gè)神庫!!


2025年4月21日 17:23 本文熱度 129

只需幾行代碼,你就能在瀏覽器中完美預(yù)覽 Word 文檔,甚至連表格樣式、頁眉頁腳都原汁原味地呈現(xiàn)出來。

接下來,給大家分享兩個(gè) Docx 預(yù)覽的庫:

docx-preview VS mammoth

docx-previewmammoth是目前最流行的兩個(gè) Word 文檔預(yù)覽庫,它們各有特色且適用于不同場景。

docx-preview:還原度爆表的選擇

安裝簡單:

npm install docx-preview

基礎(chǔ)用法:

import { renderAsync } from 'docx-preview';

// 獲取到docx文件的blob或ArrayBuffer后
renderAsync(docData, document.getElementById('container')).then(() => console.log('文檔渲染完成!'));

試了試后,這個(gè)庫渲染出來的效果簡直和 Office 打開的一模一樣!連段落格式、表格樣式、甚至是分頁效果,都完美呈現(xiàn)。

mammoth:簡潔至上的轉(zhuǎn)換器

mammoth 的思路完全不同,它把 Word 文檔轉(zhuǎn)成干凈的 HTML:

npm install mammoth

使用也很簡單:

import mammoth from 'mammoth';

mammoth.convertToHtml({ arrayBuffer: docxBuffer }).then(result => {
    document.getElementById('container').innerHTML = result.value;
    console.log('轉(zhuǎn)換成功,但有些警告:', result.messages);
});

轉(zhuǎn)換出來的 HTML 非常干凈,只保留了文檔的語義結(jié)構(gòu)。

比如,Word 中的"標(biāo)題 1"樣式會變成 HTML 中的<h1>標(biāo)簽。

哪個(gè)更適合你?

場景一:做了個(gè)簡易 Word 預(yù)覽器

要實(shí)現(xiàn)在線預(yù)覽 Word 文檔,且跟 "Word" 長得一模一樣。

首選docx-preview

import { renderAsync } from'docx-preview';

async functionpreviewDocx(fileUrl) {
    try {
        // 獲取文件
        const response = awaitfetch(fileUrl);
        const docxBlob = await response.blob();

        // 渲染到頁面上
        const container = document.getElementById('docx-container');
        awaitrenderAsync(docxBlob, container, null, {
            className'docx-viewer',
            inWrappertrue,
            breakPagestrue,
            renderHeaderstrue,
            renderFooterstrue,
        });

        console.log('文檔渲染成功!');
    } catch (error) {
        console.error('渲染文檔時(shí)出錯:', error);
    }
}

效果很贊!文檔分頁顯示,目錄、頁眉頁腳、表格邊框樣式都完美呈現(xiàn)。

不過也有些小坑:

  1. 文檔特別大時(shí),渲染速度會變慢

  2. 一些復(fù)雜的 Word 功能可能顯示不完美

場景二:做內(nèi)容編輯系統(tǒng)

需要讓用戶上傳 Word 文檔,然后提取內(nèi)容進(jìn)行編輯。

選擇mammoth

import mammoth from'mammoth';

async functionextractContent(file) {
    try {
        // 讀取文件
        const arrayBuffer = await file.arrayBuffer();

        // 自定義樣式映射
        const options = {
            styleMap: ["p[style-name='注意事項(xiàng)'] => div.alert-warning""p[style-name='重要提示'] => div.alert-danger"],
        };

        const result = await mammoth.convertToHtml({ arrayBuffer }, options);
        document.getElementById('content').innerHTML = result.value;

        if (result.messages.length > 0) {
            console.warn('轉(zhuǎn)換有些小問題:', result.messages);
        }
    } catch (error) {
        console.error('轉(zhuǎn)換文檔失敗:', error);
    }
}

mammoth 的優(yōu)點(diǎn)在這個(gè)場景下完全發(fā)揮出來:

  1.  語義化 HTML:生成干凈的 HTML 結(jié)構(gòu)
  2.  樣式映射:可以自定義 Word 樣式到 HTML 元素的映射規(guī)則
  3.  輕量轉(zhuǎn)換:處理速度非常快

進(jìn)階技巧

docx-preview 的進(jìn)階配置

renderAsync(docxBlob, container, styleContainer, {
    className: 'custom-docx'// 自定義CSS類名前綴
    inWrapper: true// 是否使用包裝容器
    ignoreWidth: false// 是否忽略頁面寬度
    ignoreHeight: false// 是否忽略頁面高度
    breakPages: true// 是否分頁顯示
    renderHeaders: true// 是否顯示頁眉
    renderFooters: true// 是否顯示頁腳
    renderFootnotes: true// 是否顯示腳注
    renderEndnotes: true// 是否顯示尾注
    renderComments: true// 是否顯示評論
    useBase64URL: false// 使用Base64還是ObjectURL處理資源
});

超實(shí)用技巧:如果只想把文檔渲染成一整頁(不分頁),只需設(shè)置breakPages: false

mammoth 的自定義圖片處理

默認(rèn)情況下,mammoth 會把圖片轉(zhuǎn)成 base64 嵌入 HTML。

在大型文檔中,這會導(dǎo)致 HTML 特別大。

更好的方案:

const options = {
    convertImage: mammoth.images.imgElement(function (image) {
        return image.readAsArrayBuffer().then(function (imageBuffer) {
            // 創(chuàng)建blob URL而不是base64
            const blob = newBlob([imageBuffer], { type: image.contentType });
            const url = URL.createObjectURL(blob);

            return {
                src: url,
                alt: '文檔圖片',
            };
        });
    }),
};

mammoth.convertToHtml({ arrayBuffer: docxBuffer }, options).then(/* ... */);

這樣一來,圖片以 Blob URL 形式加載,頁面性能顯著提升!

其他方案對比

說實(shí)話,在選擇這兩個(gè)庫之前,也有其他解決方案:

微軟 Office Online 在線預(yù)覽

利用微軟官方提供的 Office Online Server 或 Microsoft 365 的在線服務(wù),通過嵌入 WebView 或 <iframe> 實(shí)現(xiàn) DOCX 的在線渲染。

示例代碼:?

<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=文檔URL"></iframe>

優(yōu)點(diǎn)

  •  格式高度還原:支持復(fù)雜排版、圖表、公式等。
  •  無需本地依賴:純?yōu)g覽器端實(shí)現(xiàn)。
  •  官方維護(hù):兼容性最好。

折騰一圈,還是docx-previewmammoth這倆兄弟最實(shí)用。

它們提供了輕量級的解決方案,僅需幾十 KB 就能搞定 Word 預(yù)覽問題,而且不需要依賴外部服務(wù),完全可以在前端實(shí)現(xiàn)。


作者:獨(dú)立開閥者_(dá)FwtCoder
鏈接:https://juejin.cn/post/7493733975779917861
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

該文章在 2025/4/22 18:28:46 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 综合无码色情一区二区 | 2025亚洲综合色情久久 | 亚洲精品无码永久在线观看 | 97精品伊人久久久大香线蕉 | 色情五月亚洲中文字幕 | 国产白嫩美女在线观看 | 国产人妻人伦精品无码.麻豆 | 国产真实伦在线播放 | 亚洲国产制服丝袜无码av | 亚洲色婷婷开心综合久久一区 | 精品无码国产一区二区三区.伦理片手机免费观看 | 欧美日韩视频在线播放 | 色情成人一区 | 亚洲爆乳无码一区二区三区 | 亚洲源码巨擘中国有限公司的数字征程 | 国产丝袜露脸 | 最新亚洲春色av无码专区 | 毛片小视频在线观免费观看 | 亚洲精品无码专区在线观看 | 欧美人与动性xxxxx交性 | 丰满熟女高潮毛茸茸欧洲视频 | 国产av无码久久精品 | 自拍偷在线精品自拍偷99 | 无码av在专区在线观看 | 无码亚欧激情视频在线观看 | 亚洲国产精品成人五月天 | 国产区激情区精品视频区一99 | 一区二区三区在线 | 亚洲国产精品成人午夜在线观看 | 亚洲愉拍一区二区精品 | 亚洲av无码专区片在线 | 亚洲国产99在线精品一区二区 | 综合激情网站 | 国产日韩亚洲欧美国另类 | 国产精成人品日日拍夜夜免费 | 国产日产韩国在线播放 | 亚洲综合区小说区激情区 | 无码人妻精品国产婷婷 | 欧美日韩国产精品二区在线观看 | 亚洲愉拍自拍另类天堂 | 国精品人妻无码一区二区三区软件 |