vue-pdf实现PDF文件流展示

需求说明:后台返回PDF文件流,前端使用vue-pdf插件进行展示

最开始搜索出的插件都是pdf.js,但由于该vue项目不是特别完整的结构,没有public/assets文件夹,一直报找不到那个文件,最后只好放弃换一个方式。

最终采用了vue-pdf插件,可以直接安装,方便快捷

下载vue-pdf

npm install vue-pdf -D

页面使用

<pdf v-for="i in numPages" :key="i" :src="src" :page="i" ref="myPdfComponent"></pdf>

import pdf from 'vue-pdf'
// 解决部分文字不显示的问题
import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
export default {
  data () {
    return {
      src: '',
      numPages: 0,
      page: 1,
      currentPage: 0
    };
  },
  components: {
    pdf
  },
  methods: {
    //业务规则查看
    createConcert() {
			this.$loading.showLoading();
          createConcert(params)
          .then(res => {
            this.$loading.closeLoading();       
            let da = res.busiDataResp.pdfBase64;//base64文件流
            let datas = 'data:application/pdf;base64,' + da
            this.pdfUrl = pdf.createLoadingTask({ url: datas, CMapReaderFactory });
            this.pdfUrl.promise.then(pdf => {
              this.numPages = pdf.numPages;
            }); 
          }).catch(function (error) {
            this.$loading.closeLoading();
            this.$toast.showToast(error);
          });         
        },
    },
  }
}
  mounted () {
    this.createConcert();
  },

PS:
1、该方法会在控制台报一些错误,但不影响功能使用

更新:
PS:2、该插件在第一次请求时正常显示,第二次请求会乱码,目前没有找到解决方法,使用强制刷新来避免这个问题

参考

https://blog.csdn.net/yuanmengdage/article/details/111871993

上一篇:element-ui loading加载组件的使用与样式配色


下一篇:页面 loading 实现