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

前端實現(xiàn)word文檔預(yù)覽和內(nèi)容提取的詳細過程

 更新時間:2024年05月25日 11:52:37   作者:crazyXB  
在前端直接讀取并原樣展示W(wǎng)ord文檔是一個相對復(fù)雜的任務(wù),因為Word文檔的格式(如.doc或.docx)與Web技術(shù)棧使用的格式(HTML、CSS)不兼容,下面這篇文章主要給大家介紹了關(guān)于前端實現(xiàn)word文檔預(yù)覽和內(nèi)容提取的詳細過程,需要的朋友可以參考下

需求

上一篇寫了excel文檔解析,順便就看看word文檔。

解決問題

1.前端在瀏覽器預(yù)覽word文檔。

2.可以直接提取word文檔內(nèi)容

利用技術(shù)

預(yù)覽文檔--docx-preview

    <script src="https://cdn.jsdelivr.net/npm/docx-preview@0.1.15/dist/docx-preview.js"></script>

提取文檔內(nèi)容--mammoth

    <script src="https://cdn.bootcdn.net/ajax/libs/mammoth/1.6.0/mammoth.browser.min.js"></script>

預(yù)覽文檔實現(xiàn)過程

// HTML
<div id="preview"></div>

實現(xiàn)預(yù)覽功能

renderAsync接收四個參數(shù)

1.document: 數(shù)據(jù)格式可以為Blob | ArrayBuffer | Uint8Array, // could be any type that supported by JSZip.loadAsync

2.bodyContainer: 渲染的區(qū)域

3.styleContainer: 通常用于指定一個HTML元素,該元素將用于包含和管理渲染文檔所需的樣式信息,包括字體、顏色、布局等。

4.options:{} 具體參數(shù)看文檔

// JavaScript
const onWord = (event) => {
    let reader = new FileReader();
    let file = event.target.files[0];
    let options = { inWrapper: false, ignoreWidth: true, ignoreHeight: true }
    docx.renderAsync(file, document.getElementById("preview"), null, options)
}

提取word文檔實現(xiàn)過程

1.extractRawText--轉(zhuǎn)文字;

2.convertToHtml--轉(zhuǎn)HTML;

3.convertToMarkdown--轉(zhuǎn)Markdown 文檔

const onWord = (event) => {
    let reader = new FileReader();
    let file = event.target.files[0];
    if (file) {
        reader.onload = function (e) {
            const data = e.target.result;
            // 轉(zhuǎn)文字
            mammoth.extractRawText({ arrayBuffer: data }).then(function (displayResult) {
                wordData.value = displayResult.value
            }).done();
            // 轉(zhuǎn)HTML
            mammoth.convertToHtml({ arrayBuffer: data }).then(function (displayResult) {
                console.log(displayResult);
            }).done();
            // 轉(zhuǎn)Markdown 文檔。
            mammoth.convertToMarkdown({ arrayBuffer: data }).then(function (displayResult) {
                console.log(displayResult);
            }).done();
        };
        reader.readAsArrayBuffer(file);
    }
}

word預(yù)覽

效果預(yù)覽

完整代碼如下

<!DOCTYPE html>
<html lang="en">

<head>
    <title>上傳word文件</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .container {
            padding: 0 50px;
        }

        .operation {
            padding: 20px;
        }

        .btn {
            min-width: 50px;
            font-size: 20px;
            color: #fff;
            background: #118ee9;
            margin: 0 20px 0 0;
            padding: 8px;
            border: none;
            border-radius: 4px;
            box-sizing: border-box;
        }

        .item {
            width: 350px;
            box-sizing: border-box;
            padding: 4px 14px 4px 14px;
            color: #000;
            font-size: 12px;
            background: #fff;
        }

    </style>

    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/mammoth/1.6.0/mammoth.browser.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/docx-preview@0.1.15/dist/docx-preview.js"></script>

</head>

<body>
    <div class="container" id="app">
        <div class="operation">
            <button class="btn" @click="uploadFile">上傳word文件</button>
        </div>
        <br>
        <div v-if="wordData">{{wordData}}</div>
        <br>
        <div id="preview"></div>
    </div>
    <script>
        const { createApp, ref, onMounted } = Vue
        createApp({
            setup() {
                let wordData = ref('')
                const uploadFile = (mark) => {
                    let inputEle = document.createElement('input')
                    inputEle.type = 'file'
                    inputEle.accept = '.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
                    inputEle.click()
                    inputEle.addEventListener('input', (event) => {
                        onWord(event)
                    })
                };
                const onWord = (event) => {
                    let reader = new FileReader();
                    let file = event.target.files[0];
                    let options = { inWrapper: false, ignoreWidth: true, ignoreHeight: true }
                    docx.renderAsync(file, document.getElementById("preview"),null, options)
                    let fileName = file.name
                    if (file) {
                        reader.onload = function (e) {
                            const data = e.target.result;
                            // 轉(zhuǎn)文字
                            mammoth.extractRawText({ arrayBuffer: data }).then(function (displayResult) {
                                wordData.value = displayResult.value
                            }).done();
                            // 轉(zhuǎn)HTML
                            mammoth.convertToHtml({ arrayBuffer: data }).then(function (displayResult) {
                                console.log(displayResult);
                            }).done();
                            // 轉(zhuǎn)Markdown 文檔。
                            mammoth.convertToMarkdown({ arrayBuffer: data }).then(function (displayResult) {
                                console.log(displayResult);
                            }).done();
                        };
                        reader.readAsArrayBuffer(file);
                    }
                }

                return {
                    wordData,
                    uploadFile,
                    onWord,
                }
            }
        }).mount('#app')
    </script>
</body>

</html>

總結(jié) 

到此這篇關(guān)于前端實現(xiàn)word文檔預(yù)覽和內(nèi)容提取的文章就介紹到這了,更多相關(guān)前端word文檔預(yù)覽和內(nèi)容提取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS動態(tài)高度虛擬列表實現(xiàn)原理解析

    JS動態(tài)高度虛擬列表實現(xiàn)原理解析

    這篇文章將和大家一起探討一下動態(tài)高度虛擬列表原理并指出常見虛擬列表采用累計高度方式存在缺點,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • IE6-IE9中tbody的innerHTML不能賦值的解決方法

    IE6-IE9中tbody的innerHTML不能賦值的解決方法

    這篇文章主要介紹了IE6-IE9中tbody的innerHTML不能賦值的解決方法,很實用,需要的朋友可以參考下
    2014-09-09
  • JavaScript定時器實現(xiàn)的原理分析

    JavaScript定時器實現(xiàn)的原理分析

    JavaScript中的定時器大家基本在平時的開發(fā)中都遇見過吧,但是又有多少人去深入的理解其中的原理呢?本文我們就來分析一下定時器的實現(xiàn)原理、定時器的妙用、定時器使用注意事項,有興趣的朋友可以看下
    2016-12-12
  • 百度搜索框智能提示案例jsonp

    百度搜索框智能提示案例jsonp

    這篇文章主要介紹了百度搜索框智能提示案例jsonp的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • JS實現(xiàn)按鈕顏色切換效果

    JS實現(xiàn)按鈕顏色切換效果

    這篇文章主要為大家詳細介紹了JS實現(xiàn)按鈕顏色切換效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • JavaScript 亂碼問題

    JavaScript 亂碼問題

    在用js寫網(wǎng)頁時,如果html等內(nèi)容全部用document.write輸出,包括<html>、<meta等標(biāo)簽,當(dāng)嵌套時,會出現(xiàn)輸出內(nèi)容為亂碼的問題
    2009-08-08
  • 淺談pc端rem字體設(shè)置的問題

    淺談pc端rem字體設(shè)置的問題

    下面小編就為大家?guī)硪黄獪\談pc端rem字體設(shè)置的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • js實現(xiàn)拾色器插件(ColorPicker)

    js實現(xiàn)拾色器插件(ColorPicker)

    這篇文章主要為大家詳細介紹了js實現(xiàn)拾色器插件ColorPicker,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 用瀑布流的方式在網(wǎng)頁上插入圖片的簡單實現(xiàn)方法

    用瀑布流的方式在網(wǎng)頁上插入圖片的簡單實現(xiàn)方法

    下面小編就為大家?guī)硪黄闷俨剂鞯姆绞皆诰W(wǎng)頁上插入圖片的簡單實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • Javascript中函數(shù)名.length屬性用法分析(對比arguments.length)

    Javascript中函數(shù)名.length屬性用法分析(對比arguments.length)

    這篇文章主要介紹了Javascript中函數(shù)名.length屬性用法,結(jié)合實例形式簡單對比分析了與arguments.length屬性的用法區(qū)別,需要的朋友可以參考下
    2016-09-09

最新評論

龙陵县| 宝清县| 山丹县| 永修县| 新兴县| 阿鲁科尔沁旗| 武川县| 鞍山市| 利辛县| 上饶市| 平阳县| 克东县| 五寨县| 囊谦县| 罗甸县| 上思县| 叙永县| 舒城县| 汾阳市| 永清县| 铜川市| 蓝田县| 安徽省| 霍林郭勒市| 西吉县| 孟州市| 五台县| 江永县| 门源| 原阳县| 鄂伦春自治旗| 客服| 本溪| 济阳县| 盖州市| 西林县| 山阴县| 镇平县| 丹凤县| 宝应县| 从江县|