首页 前端知识 vue3 vite2 预览pdf

vue3 vite2 预览pdf

2024-08-10 22:08:47 前端知识 前端哥 18 75 我要收藏

vue3 + ts + vite2 预览pdf展示

调用后端接口 返回 附件文件流
接口请求 请求体中添加 responseType: ‘blob’,
接口返回在这里插入图片描述
返回的blob 通过

 const blob = new Blob([res.data]); //1.创建一个blob
 const link = document.createElement('a'); //2.创建一个a链接
 link.download = val.fileName; //3.设置名称

 link.style.display = 'none'; // 4.默认不显示
 link.href = URL.createObjectURL(blob); // 5.设置a链接href
 document.body.appendChild(link);
 // 如果是 window 操作的话 直接可以通过 window.open(document.body.appendChild(link)) 打开pdf

h5 尤其是内置浏览器(钉钉/微信)点击链接打开的 open 不生效

h5操作步骤

安装 “pdfh5”: “1.3.20”,
npm install pdfh5 --save
组件封装并引入pdfh5

<!-- BasePdfView.vue -->
<template>
  <div id="pdf-view">
    <div id="pdf"></div>
  </div>
</template>
<script>
import Pdfh5 from 'pdfh5';
import 'pdfh5/css/pdfh5.css';
import { reactive, toRefs, onMounted, onBeforeMount } from 'vue';
import { useRoute, useRouter } from 'vue-router';
export default {
  name: 'PdfView',
  setup() {
    const route = useRoute();
    const router = useRouter();
    const state = reactive({
      pdfh5: null,
    });
    onMounted(() => {
      state.pdfh5 = new Pdfh5('#pdf', {
        pdfurl: route.query.url,
      });
      state.pdfh5.on('complete', function (status, msg, time) {
        console.log('状态:' + status + ',信息:' + msg + ',耗时:' + time + '毫秒,总页数:' + this.totalNum);
      });
      state.pdfh5.on('error', (msg, time) => {
        // console.log('pdf加载失败', '信息:', msg, ', 耗时:', time, '毫秒');
        router.back();
      });
    });

    return {
      ...toRefs(state),
    };
  },
};
</script>

<style lang="scss" scoped>
#pdf-view {
  height: 100%;
  #pdf {
    height: 100%;
    :deep(.pinch-zoom-container) {
      height: 100% !important;
    }
  }
  :deep(.pdfViewer) {
    padding: 0;
  }
}
</style>

h5调用组件 或 router 跳转 新的页面去展示

// 这里使用 router
  let url = window.URL.createObjectURL(new Blob([res.data]));

      const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
      const flieArr = val.fileName.split('.');
      let suffix = flieArr[flieArr.length - 1];

      // 进行图片匹配
      let result = imglist.find((item) => item === suffix);
      if (result) {
        state.imgUrl = url;
        state.imgShow = true;
      } else {
        if (url != null && url != undefined && url) {
          router.push({ path: '/preview', query: { url: url } });
        }
      }

如果有空白页面 或者有图字体不展示 可能是版本问题
我使用的 是 “pdfh5”: “1.3.20”,
(end)

转载请注明出处或者链接地址:https://www.qianduange.cn//article/15285.html
标签
评论
发布的文章

jQuery3 学习手册(三)

2024-08-18 22:08:04

vue和jQuery有什么区别

2024-04-29 11:04:47

推荐项目:jQuery.Gantt

2024-08-18 22:08:37

jQuery UI 秘籍(一)

2024-08-18 22:08:15

jQuery详解

2024-04-29 11:04:38

echarts饼图点击图例问题

2024-08-18 22:08:48

echarts天气折线图

2024-08-18 22:08:46

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!