美文网首页
vue pdf流文件在前端展示

vue pdf流文件在前端展示

作者: 殇城阡陌 | 来源:发表于2020-10-29 09:28 被阅读0次

参考多个资料和具体实践,决定使用pdfjs

下载地址:http://mozilla.github.io/pdf.js/getting_started/#download

下载完成后放到public/static目录下

具体使用

template:<iframe :src="pdfSrc" frameborder="0" style="width: 100%; height: 100%;"></iframe>

将通过request请求获取的pdf Blod数据流:

    getData(url) {

      const auth = JSON.parse(localStorage.getItem("auth") || null) || {};

      const xhr = new XMLHttpRequest();

      xhr.open("GET", url, true);

      xhr.setRequestHeader("token", auth.token);

      xhr.responseType = "blob";

      xhr.onload = function() {

        if (xhr.status === 200) {

          let content = xhr.response;

          this.pdfTask(new Blob([content]));

        } else {

          return false;

        }

      };

      xhr.send();

    },

转换为url,method:

    getObjectURL(file) {

      let url = null;

      if (window.createObjectURL != undefined) {

        // basic

        url = window.createObjectURL(file);

      } else if (window.webkitURL != undefined) {

        // webkit or chrome

        try {

          url = window.webkitURL.createObjectURL(file);

        } catch (error) {

          console.log(error);

        }

      } else if (window.URL != undefined) {

        // mozilla(firefox)

        try {

          url = window.URL.createObjectURL(file);

        } catch (error) {

          console.log(error);

        }

      }

      return window.origin +  "/static/pdf/web/viewer.html?file=" + url;

    }


本地测试:

template:<input type="file" @change="checkFile($event)"  />

checkFile(event) {

      const self = this;

      let reader = new FileReader();

      reader.onload = function() {

        // 将返回的流数据转换为url

        self.getObjectURL(new Blob([this.result]));

      };

      reader.readAsArrayBuffer(event.target.files[0]);

    },

相关文章

网友评论

      本文标题:vue pdf流文件在前端展示

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