对于docx、xlsx、pdf文件的在线浏览,有个比较好的插件vue-office
使用方法如下:
1、安装相应插件
//docx文档预览组件 npm install @vue-office/docx -S //excel文档预览组件 npm install @vue-office/excel -S //pdf文档预览组件 npm install @vue-office/pdf -S
2、使用
<template>
<div>
<vue-office-docx v-if="fileType=='docx'" :src="fileUrl" @rendered="renderedHandler" @error="errorHandler" />
<vue-office-excel v-else-if="fileType=='xlsx'" :src="fileUrl" @rendered="renderedHandler" @error="errorHandler" />
<vue-office-pdf v-else-if="fileType=='pdf'" :src="fileUrl" @rendered="renderedHandler" @error="errorHandler" />
</div>
</template>
<script>
import VueOfficePdf from '@vue-office/pdf'
import VueOfficeExcel from '@vue-office/excel'
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/excel/lib/index.css'
import '@vue-office/docx/lib/index.css'
export default {
components: {
VueOfficeDocx,
VueOfficeExcel,
VueOfficePdf
},
data() {
return {
fileType: '',
fileUrl:'',
}
}
}
</script>而对于ppt文件的在线浏览,vue-office则没有相关的插件,网上找了几种方法,始终没有能找到很好的在vue上使用的插件,总结方法如下:
1、需要借助第三方库jszip和officegen来进行解析和生成展示页面
https://www.5axxw.com/questions/simple/qnxpwz
2、使用插件pspdfkit(需要收费)
https://pspdfkit.com/getting-started/web
3、使用微软官方的office文件在线查看器
https://juejin.cn/post/7025400224721928223
4、使用js插件pptxjs(最后只能临时使用这种方法)
在PPTXjs官网下载最新版插件,或者下载下面版本插件,并在index.html内引入
<link rel="stylesheet" href="/PPTXjs/css/pptxjs.css"> <link rel="stylesheet" href="/PPTXjs/css/nv.d3.min.css"><!-- for charts graphs --> <script type="text/javascript" src="/PPTXjs/js/jquery-1.11.3.min.js"></script> <script type="text/javascript" src="/PPTXjs/js/jszip.min.js"></script><!-- v2.. , NOT v.3.. --> <script type="text/javascript" src="/PPTXjs/js/filereader.js"></script><!--https://github.com/meshesha/filereader.js --> <script type="text/javascript" src="/PPTXjs/js/d3.min.js"></script> <!-- for charts graphs --> <script type="text/javascript" src="/PPTXjs/js/nv.d3.min.js"></script> <!-- for charts graphs --> <script type="text/javascript" src="/PPTXjs/js/pptxjs.js"></script> <script type="text/javascript" src="/PPTXjs/js/divs2slides.js"></script> <!-- for slide show -->
html代码
<div id="pptx"></div>
js代码
$("#pptx").pptxToHtml({
pptxFileUrl: "Sample_12.pptx", //pptx文件地址
slidesScale: "100%",
slideMode: false,
keyBoardShortCut: false });如果是移动端或者通过iframe引入导致生成的html元素过大会溢出屏幕,需要把div缩放
// 由于生成的html元素过大会溢出,这里用定时器检测元素生成完毕后进行缩放显示let timer = setInterval(() => {
const $slides = $(".slides");
if ($slides.children().length) {
const slidesWidth = Math.max(...Array.from($slides.children()).map((s) => s.offsetWidth))
const $wrapper = $('#pptx');
const wrapperWidth = $wrapper[0].offsetWidth;
$wrapper.css({
transform: `scale(${
wrapperWidth / slidesWidth})`,
"transform-origin": "top left",
})
clearInterval(timer)
}}, 100);
本帖已被设为精华帖!