当前位置: 代码网 > it编程>编程语言>Javascript > 前端实现word文档预览和内容提取的详细过程

前端实现word文档预览和内容提取的详细过程

2024年06月12日 Javascript 我要评论
需求上一篇写了excel文档解析,顺便就看看word文档。解决问题1.前端在浏览器预览word文档。2.可以直接提取word文档内容利用技术预览文档--docx-preview <scri

需求

上一篇写了excel文档解析,顺便就看看word文档。

解决问题

1.前端在浏览器预览word文档。

2.可以直接提取word文档内容

利用技术

预览文档--docx-preview

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

提取文档内容--mammoth

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

预览文档实现过程

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

实现预览功能

renderasync接收四个参数

1.document: 数据格式可以为blob | arraybuffer | uint8array, // could be any type that supported by jszip.loadasync

2.bodycontainer: 渲染的区域

3.stylecontainer: 通常用于指定一个html元素,该元素将用于包含和管理渲染文档所需的样式信息,包括字体、颜色、布局等。

4.options:{} 具体参数看文档

// 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文档实现过程

1.extractrawtext--转文字;

2.converttohtml--转html;

3.converttomarkdown--转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;
            // 转文字
            mammoth.extractrawtext({ arraybuffer: data }).then(function (displayresult) {
                worddata.value = displayresult.value
            }).done();
            // 转html
            mammoth.converttohtml({ arraybuffer: data }).then(function (displayresult) {
                console.log(displayresult);
            }).done();
            // 转markdown 文档。
            mammoth.converttomarkdown({ arraybuffer: data }).then(function (displayresult) {
                console.log(displayresult);
            }).done();
        };
        reader.readasarraybuffer(file);
    }
}

word预览

效果预览

完整代码如下

<!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;
                            // 转文字
                            mammoth.extractrawtext({ arraybuffer: data }).then(function (displayresult) {
                                worddata.value = displayresult.value
                            }).done();
                            // 转html
                            mammoth.converttohtml({ arraybuffer: data }).then(function (displayresult) {
                                console.log(displayresult);
                            }).done();
                            // 转markdown 文档。
                            mammoth.converttomarkdown({ arraybuffer: data }).then(function (displayresult) {
                                console.log(displayresult);
                            }).done();
                        };
                        reader.readasarraybuffer(file);
                    }
                }

                return {
                    worddata,
                    uploadfile,
                    onword,
                }
            }
        }).mount('#app')
    </script>
</body>

</html>

总结 

到此这篇关于前端实现word文档预览和内容提取的文章就介绍到这了,更多相关前端word文档预览和内容提取内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com