pdf.js跨域请求pdf文件_以文件流方式

使用前端插件pdf.js 在h5页面在线浏览pdf文件,与之前使用不一样得地方是,pdf文件存放在其他服务器,还按照原来使用得方法果不其然得报错,跨域了,网上目前找的办法中,说的最多得,是把判断跨域得js代码给注释了,就是这段

if (origin !== viewerOrigin && protocol !== 'blob:') {
  throw new Error('file origin does not match viewer\'s');
}

然而,没屌用,不知道是我版本得问题还是啥;

后端php代码:

public function read_file()
{
	$pdfurl = file_get_contents('域名/文件名.pdf'); //pdf文件地址
	$fileUrl = base64_encode($pdfurl);//转base64
	$data = [
   		'wt_fileurl' => $fileUrl,
	];
	echo json_encode($data, true);exit;
}

开始没有转base64 但是前端ajax说啥就是接不着,一直进这里

error: function(error) {
         console.log(error);
     },

但是打印出来 状态还都是200 挺费解得,给转成base64之后,一切都正常了

接下来是前端部分

<iframe id="pdf" width="100%" height="800" src=""></iframe>
// 以流得方式打pdf文件,跨域访问pdf时使用
    $.ajax({
        type: "POST",
        url: "/filemanager/filemanager/pdfindex",
        dataType: 'json',
        async:false,//同步请求
        success: function(e) { 
            // console.log(e.data.fileUrl);
            sessionStorage.setItem('_imgUrl',e.data.fileUrl)
            var url = '/static/pdfjs/web/viewer.html'; //这个路径是pdf.js下载以后 viewer.html所在路径
            $('#pdf').attr("src",url);
        },
        error: function(error) {
            console.log(error);
        },
        complete: function(response) {}
    });

viewer.html文件修改

<script>
  var DEFAULT_URL = "";
  var pdfUrl = document.location.search.substring(1);
  if(null == pdfUrl || "" == pdfUrl){
      var BASE64_MARKER = ';base64,';//声明文件流编码格式
      var preFileId = "";
      var pdfAsDataUri = sessionStorage.getItem("_imgUrl");//这里就是pdf文件的base64码,我是通过session传递base64的
      var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
      DEFAULT_URL = pdfAsArray;
      //编码转换
      function convertDataURIToBinary(dataURI) {
          var raw = window.atob(dataURI);//这个方法在ie内核下无法正常解析。
          var rawLength = raw.length;
          //转换成pdf.js能直接解析的Uint8Array类型
          var array = new Uint8Array(new ArrayBuffer(rawLength));
          for (i = 0; i < rawLength; i++) {
              array[i] = raw.charCodeAt(i) & 0xff;
          }
          return array;
      }
  }
</script>

这段js需要放在viewer.js引用之前,就是下面这个玩意前面

<script src="viewer.js"></script> 

然后在修改 viewer.js 文件
4663行左右
compressed.tracemonkey-pldi-09.pdf 改成 DEFAULT_URL,如下:

var defaultOptions = {
  cursorToolOnLoad: {
    value: 0,
    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
  },
  defaultUrl: {
    value: DEFAULT_URL,//"compressed.tracemonkey-pldi-09.pdf",
    kind: OptionKind.VIEWER
  },
  defaultZoomValue: {
    value: "",
    kind: OptionKind.VIEWER + OptionKind.PREFERENCE
  },

修改 viewer.js.map 文件

defaultUrl: {\n    /** @type {string} */\n    value: \"compressed.tracemonkey-pldi-09.pdf\",\n    kind: OptionKind.VIEWER,\n  },
defaultUrl: {\n    /** @type {string} */\n    value: \"DEFAULT_URL\",\n    kind: OptionKind.VIEWER,\n  },

同样compressed.tracemonkey-pldi-09.pdf 改成 DEFAULT_URL
直接编辑器搜索 compressed.tracemonkey-pldi-09.pdf 就找到了
到此 结束 成功 pdf.js下载到官网直接下载就好了,没啥说得了

https://www.jianshu.com/p/8fb76e21b05e 感谢这篇文章得作者,弄了好久,终于在这里拨开云雾见月明了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值