vue3实现word,excel,pdf,mp3,mp4,ppt,txt文件预览
一,word预览(.doc/.docx):
- npm下载插件
- npm i docx-preview@0.1.4
- npm i jszip
<template>
<!-- 测试word -->
<div @click='yulan'>预览</div>
<n-modal
v-model:show="previewOptions.showModal"
style="width: 800px"
class="custom-card"
preset="card"
title="previewOptions.title"
size="huge"
:bordered="false"
>
<div ref="word"></div>
</n-modal>
<template>
<script setup>
import axios from 'axios'
import { renderAsync } from 'docx-preview'
import XLSX from 'xlsx'
window.JSZip = JSZip
let word = ref(null)
function yulan(){
if (['doc', 'docx'].includes(type)) {
previewOptions.value.showModal = true
axios({
method: 'get',
responseType: 'blob',
url: 'docx',
}).then(({ data }) => {
renderAsync(data, word.value)
})
return
}
}
</script>
二,excel文件预览(.xls/.xlsx)
- import XLSX from ‘xlsx’
<template>
<!-- 测试word -->
<div @click='yulan'>预览</div>
<div v-html="tableau"></div>
</template>
<script setup>
import XLSX from 'xlsx'
let tableau = ref(null)
function yulan(){
if (['xls', 'xlsx'].includes(type)) {
previewOptions.value.showModal = true
axios
.get('http://42.193.105.146:9000/nt1/test/test.xlsx', {
responseType: 'arraybuffer',
})
.then(({ data }) => {
let workbook = XLSX.read(new Uint8Array(data), { type: 'array' })
var worksheet = workbook.Sheets[workbook.SheetNames[0]]
tableau.value = XLSX.utils.sheet_to_html(worksheet)
})
return
}
}
</script>
三,pdf文件预览
window.open(url)
四,mp3/mp4
<template>
<!-- mp3 -->
<audio v-else-if="previewOptions.type === 'audio'" controls :src="previewOptions.resourcePath"></audio>
<!-- mp4 -->
<video v-else-if="previewOptions.type === 'video'" controls :src="previewOptions.resourcePath"></video>
</template>
五,ppt,word,excel,txt,pdf都可以预览
<template>
<!-- 预览ppt -->
<div @click='yulan'>预览</div>
<iframe :src="iframeUrl" frameborder="0" width="100%" height="600"></iframe>
</template>
<script setup>
let iframeUrl = ref(null)
function yulan(){
let url = 'http://view.xdocin.com/xdoc?_xdoc=' + 'url'
iframeUrl.value = url
}
</script>