美文网首页
vue中预览pdf文件

vue中预览pdf文件

作者: 花影_62b4 | 来源:发表于2021-07-09 17:34 被阅读0次

    1、发现了个更香更简单的方法(IE低版本可能不行)
    <iframe src="./test.pdf" frameborder="0" style="width: 100%; height:900px"></iframe>
    2、或者可以使用插件vue-pdf,具体页面见下

    <template>
      <div class="pdfPage">
       <el-button-group class="btns">
          <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button>
          <el-button class='mar-l-5' type="primary" size="mini" @click="nextPage"
            >下一页<i class="el-icon-arrow-right el-icon--right"></i
          ></el-button>
        </el-button-group>
        <div style="marginTop: 10px; color: #409EFF;text-align:center">{{ pageNum }} / {{ pageTotalNum }}</div>
        <pdf :page="pageNum" src="./test.pdf" @progress="loadedRatio = $event" @num-pages="pageTotalNum = $event"></pdf> 
        
      </div>
    </template>
    
    <script>
    import pdf from 'vue-pdf'
    
    export default {
      name: 'pdfPreview',
      components: {
        pdf
      },
      props: {
        // url:{
        //     type:String
        // }
      },
      data() {
        return {
          url: '',
          pageNum: 1,
          pageTotalNum: 1, //# 总页数
          loadedRatio: 0 //# 当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了
        }
      },
    
      methods: {
        // getNumPages() {
        //   let loadingTask = pdf.createLoadingTask(this.url)
        //   loadingTask.promise
        //     .then(pdf => {
        //       this.pageTotalNum = pdf.numPages
        //     })
        //     .catch(err => {
        //       console.error('pdf 加载失败', err)
        //     })
        // },
        // 上一页
        prePage() {
          let page = this.pageNum
          page = page > 1 ? page - 1 : this.pageTotalNum
          this.pageNum = page
        },
    
        // 下一页
        nextPage() {
          let page = this.pageNum
          page = page < this.pageTotalNum ? page + 1 : 1
          this.pageNum = page
        }
      }
    }
    </script>
    
    <style lang='scss' scoped >
    .btns{
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: center;
      .mar-l-5{
        margin-left: 5px;
      }
    }
    </style>
    

    3、后台返回流文件转化为pdf的url,然后用1方法展示即可
    const blob = new Blob([res.data], { type: 'application/pdf;charset=UTF-8' });
    this.pdfUrl = URL.createObjectURL(blob);
    4、流文件下载方式

    export function saveStreamFile(res, config) {
      //contentType: 'application/vnd.ms-excel;charset=UTF-8'    excel
    
      let opt = {
        fileName: res.fileName || 'download',
        contentType: 'application/zip;charset=UTF-8',
        ...config
      };
      const blob = new Blob([res.data], { type: opt.contentType });
      const a = document.createElement('a');
      a.href = URL.createObjectURL(blob);
      a.download = `${opt.fileName}${opt.extName ? '.' + opt.extName : ""}`;
      a.click();
      URL.revokeObjectURL(a.href);
    }
    //用法
     saveStreamFile(res, { contentType: 'application/vnd.ms-excel;charset=UTF-8' })
    

    相关文章

      网友评论

          本文标题:vue中预览pdf文件

          本文链接:https://www.haomeiwen.com/subject/lsgfpltx.html