vue内使用pdf.js

主要是记录一下踩的坑,使用还是非常简单的。

首先是去官网下载pdf.js,可以采用install模式,不过直接下载有例子可以参考,我就采取的直接下载,官网地址http://mozilla.github.io/pdf.js/getting_started/#download

万万没想到我在这里遇到了我最大的一个坑,整整纠结了我一上午

下载的时候我没有选择下载(for old browsers)这个版本,而是下载了左边的版本

由于下错了版本,导致语法不兼容在iframe打开pdf文件时没法解析,于是就算路径没有问题也一直是打开的项目首页,也就是‘#/’这个路径......真的很无语。

然后使用,下载过后解压缩,我是vue2.0的版本,我给文件夹改名了pdfjs,然后把整个文件夹放到static下面,像这个样子

引入就算完成了,项目中使用也很简单,页面DOM结构

<div style="height: calc(100% - 35px)">
  <iframe
     id="printIframe"
     frameborder="0"
     :src="'/static/pdfjs/web/viewer.html?file=' + previewUrl"
     style="width: 100%; height: 100%"
  >
  </iframe>
</div>

js部分:

XMLHttpRequest那部分是因为返回的服务器端pdf地址会有跨域问题,把文件变成文件流形式再次转成URL就不会有跨域问题了。

我的URL是后台返回的,就在返回方法里赋值啦

    onlinePreview(item) {
      this.previewLoading = true; // 打开加载样式
      this.previewVisible = true; // 打开显示弹窗
      var Data = [{ FMName: "FJ_ZaiXianYuLan", DataID: item.DID }];
      let _this = this;
      this.socketApi.sendSock(Data, (result) => {
        var fileInfo = JSON.parse(result)[0];
        var x = new XMLHttpRequest(); // 跨域问题的解决
        x.open("GET", fileInfo.URL, true);
        x.responseType = "blob";
        x.onload = function (e) {
          //会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。
          _this.previewUrl = window.URL.createObjectURL(x.response);
        };
        x.send();
        this.previewLoading = false; // 关闭等待样式
      });
    },

最后的预览就是很正常的样子了,最大的坑居然是下载错了,再次感叹自己真够呆的......会发现还是因为去网上下了个demo发现demo可以运行,哭了 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值