当前位置: 首页 > article >正文

vue3 查看word pdf excel文件

也是在网上找的基础上修改的 可以直接使用

npm install @vue-office/docx
npm install @vue-office/excel
npm install @vue-office/pdf​
<template>
  <div
    class="Office-Preview"
    v-loading="loading"
    element-loading-text="文件加载中..."
  >
    <VueOfficeDocx
      v-if="fileType === 'docx'"
      :src="fileUrl"
      @rendered="rendered"
      @error="onError"
    ></VueOfficeDocx>
    <VueOfficeExcel
      v-if="fileType === 'excel'"
      :src="fileUrl"
      @rendered="rendered"
      @error="onError"
    ></VueOfficeExcel>
    <VueOfficePdf
      v-if="fileType === 'pdf'"
      :src="fileUrl"
      @rendered="rendered"
      @error="onError"
    ></VueOfficePdf>

    <el-empty
      v-if="fileType === 'errType'"
      image=""
      description="文件格式不规范"
      :image-size="300"
    ></el-empty>
    <el-empty
      v-if="fileType === 'loadErr'"
      image=""
      description="文件加载失败"
      :image-size="300"
    ></el-empty>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';

// 引入 VueOffice 相关组件
import VueOfficeDocx from '@vue-office/docx';
import VueOfficeExcel from '@vue-office/excel';
import '@vue-office/excel/lib/index.css';
import VueOfficePdf from '@vue-office/pdf';

// 使用 useRoute 获取链接参数
const route = useRoute();
const fileUrl = ref(route.query.url || ''); // 从 URL 参数中获取 fileUrl

// 定义响应式数据
const fileType = ref('');
const loading = ref(true);

const init = () => {
  if (!fileUrl.value) {
    console.error('文件为空');
    loading.value = false;
    return;
  }

  const fileName = fileUrl.value.split('/').pop();
  const fileExtension = fileName.substring(fileName.lastIndexOf('.') + 1);

  if (fileExtension === 'doc' || fileExtension === 'docx') {
    fileType.value = 'docx';
  } else if (fileExtension === 'xls' || fileExtension === 'xlsx') {
    fileType.value = 'excel';
  } else if (fileExtension === 'pdf') {
    fileType.value = 'pdf';
  } else if (fileExtension === 'ppt' || fileExtension === 'pptx') {
    fileType.value = 'ppt';
  } else {
    fileType.value = 'errType';
    loading.value = false;
  }
};

// 渲染和错误处理方法
const rendered = () => {
  console.log('渲染完成');
  loading.value = false;
};

const onError = () => {
  console.error('加载出错');
  loading.value = false;
  fileType.value = 'loadErr';
};

// 使用 Vue 3 的 onMounted 生命周期钩子
onMounted(() => {
  init();
});
</script>

<style scoped lang="scss">
.Office-Preview {
  overflow-y: scroll;
  height: 100%;
}
</style>


http://www.kler.cn/a/399096.html

相关文章:

  • Tomcat启动过程中cmd窗口(控制台)中文乱码的问题
  • 6.584-Lab1:MapReduce
  • MongoDB在现代Web开发中的应用
  • 平台整合是网络安全成功的关键
  • 在Ubuntu22.04上源码构建ROS noetic环境
  • Rust 语言学习笔记(五)
  • 【论文阅读】(Security) Assertions by Large Language Models
  • # JAVA中的Stream学习
  • STM32设计防丢防摔智能行李箱
  • 计算机毕业设计 | springboot+vue大学城水电管理系统 校园学校物业水电管理(附源码+文档)
  • Spring:IoC/DI加载properties文件
  • opencv kdtree pcl kdtree 效率对比
  • Linux中开启 Vim 之旅:从快捷键到插件的实用手册
  • Android【01】TRTC实现跨应用屏幕录制
  • STL序列式容器之list
  • 企业案例:钉钉宜搭对接金蝶云星空
  • HTML5拖拽API学习 托拽排序和可托拽课程表
  • 使用CNN进行验证码识别:深度学习与图像预处理教程
  • conda创建 、查看、 激活、删除 python 虚拟环境
  • 高效协作:前后端合作规范与应对策略优化
  • Day18 Nim游戏
  • 搜维尔科技:SenseGlove触觉反馈手套开箱+场景测试
  • layui.all.js:2 Uncaught Error: Syntax error, unrecognized expression
  • QDataStream
  • vue项目使用eslint+prettier管理项目格式化
  • 阿里巴巴通义灵码推出Lingma SWE-GPT:开源模型的性能新标杆