vue使用docx-preview實(shí)現(xiàn)docx文件在線預(yù)覽功能全過(guò)程
之前一般做項(xiàng)目進(jìn)行文件瀏覽的時(shí)候基本都是用的window.open+url的形式打開(kāi)文件,進(jìn)行瀏覽操作的,但是這種打開(kāi)方式只能夠在線瀏覽如jpg、png、pdf這類文件,對(duì)于文檔類型docx這種則是用下載的方式打開(kāi)的。這次甲方爸爸不想要下載了,于是就來(lái)使docx-preview這個(gè)在線預(yù)覽組件了。(這個(gè)插件只能夠?qū)崿F(xiàn)docx后綴的文件,doc文件打不開(kāi)滴)
1.下載插件
npm i docx-preview --save or yarn add docx-preview
2.導(dǎo)入
import { renderAsync } from 'docx-preview';
//一般用這種形式就行了
let docx = requie('docx-preview');
//我是vue3項(xiàng)目 報(bào)錯(cuò)require不行 就用的下邊這種了
let docx = import.meta.glob('docx-preview');3.使用組件

如圖有兩個(gè)文件,設(shè)計(jì)點(diǎn)擊時(shí)傳送文件file 得到如下數(shù)據(jù)

因?yàn)橹吧蟼鲿r(shí)已經(jīng)限定了上傳文件格式,所以通過(guò)fileType判斷,是圖片文件還是docx文檔文件,圖片文件則直接傳url瀏覽,文檔文件則需處理,選擇的是將文件通過(guò)url地址換成以下這種形式進(jìn)行操作

要渲染的組件:
<div ref="childRef" class="childRef"></div>
渲染語(yǔ)法:
function previewfile(item) {
if (item.fileType == '.docx') {
nextTick(() => {
fetch(item.filePath)
.then((response) => {
let docData = response.blob(); //將文件轉(zhuǎn)換成bolb形式
//選擇要渲染的元素
let childRef = document.getElementsByClassName('childRef');
//用docx-preview渲染
renderAsync(docData, childRef[0]).then((res) => {
console.log('res---->', res);
});
})
.catch((error) => {
console.log(error);
});
});
} else {
ImageUrl.value = toRaw(item).filePath;
}
}實(shí)現(xiàn)結(jié)果

這個(gè)組件渲染出來(lái)有自帶的樣式,自己修改修改樣式就行了

更新一下關(guān)于樣式方面的問(wèn)題:
文檔以彈窗形式出現(xiàn)組件代碼如下
<el-dialog v-model="dialogVisible" class="dialogLarge" append-to-body :destroy-on-close="true">
//此處是彈窗名稱
<template #header>
<div class="dialogHeader">
<div>預(yù)覽</div>
</div>
</template>
//此處是預(yù)覽圖片的Img組件
<img
w-full
:src="dialogImageUrl"
alt="Preview Image"
style="height: auto; width: 100%"
v-show="dialogImageUrl"
/>
//此處是用于渲染docx文檔的div
<div ref="childRef" class="childRef"></div>
</el-dialog>生成效果如圖:

這個(gè)組件會(huì)自動(dòng)生成docx-wrapper的div盒子,有自帶的樣式

1.修改.docx-wrapper{background:white}去除灰邊

2..docx-wrapper>section.docx{box-shadow:none}去除陰影效果

屏蔽或者用!important設(shè)置section.docx自帶的高度寬度等屬性,得到符合UI要求的樣子
//vue3使用:deep(){}的形式進(jìn)行樣式穿透
//vue2是::v-deep或者/deep/的形式進(jìn)行樣式穿透
:deep(.docx-wrapper) {
background-color: #fff;
padding: 0;
}
:deep(.docx-wrapper > section.docx) {
width: 100% !important;
padding: 0rem !important;
min-height: auto !important;
box-shadow: none;
margin-bottom: 0;
}總結(jié)
到此這篇關(guān)于vue使用docx-preview實(shí)現(xiàn)docx文件在線預(yù)覽功能的文章就介紹到這了,更多相關(guān)vue實(shí)現(xiàn)docx文件在線預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
element ui loading加載開(kāi)啟與關(guān)閉方式
這篇文章主要介紹了element ui loading加載開(kāi)啟與關(guān)閉方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vue 項(xiàng)目中使用Loading組件的示例代碼
這篇文章主要介紹了vue 項(xiàng)目中使用Loading組件的示例代碼,使用 loding 過(guò)渡數(shù)據(jù)的加載時(shí)間2018-08-08
vue實(shí)現(xiàn).md文件預(yù)覽功能的兩種方法詳解
這篇文章主要介紹了Vue預(yù)覽.md文件的兩種方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2025-04-04
vue實(shí)現(xiàn)列表倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)列表倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
uniapp實(shí)現(xiàn)紅包動(dòng)畫(huà)效果代碼實(shí)例(vue3)
uniapp作為一種基于Vue.js的前端框架,實(shí)現(xiàn)了一套代碼多端運(yùn)行的理念,成為了眾多開(kāi)發(fā)者的首選,下面這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)紅包動(dòng)畫(huà)效果的相關(guān)資料,需要的朋友可以參考下2024-01-01

