移动端浏览器 jquery 获取 pdf blob文件流 预览pdf

最近遇到一个需求,一个古早的移动端 juery 项目要求做一个页面,从接口获取 pdf 文件流,然后预览出来

这里使用第三方工具:pdf.js

代码如下:

复制代码
// 引入相关文件

<script src="../js/pdf.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/pdf.worker.js" type="text/javascript" charset="utf-8"></script>
<script src="../js/jquery.min.js"></script>
<script src="../js/pdfh5.js" type="text/javascript" charset="utf-8"></script>

// 转化编码格式
function converData(data) {
    data = data.replace(/[\n\r]/g, '');
    var raw = window.atob(data);
    var rawLength = raw.length;
    var array = new Uint8Array(new ArrayBuffer(rawLength));
    for (var i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i)
    }
    return array
}

// 点击获取当前标签的 id 属性值
$("#contain-wrapper").on("click", ".contain-main", function(e) {
   var id = $(this).attr("id")
   const params = {
       reportDocId: id
   }
   $.ajax({
       xhrFields: {
           withCredentials: true
       },
       crossDomain: true == !(document.all),
       type: 'POST', // 请求方式
       url: '接口地址', // 接口地址
       data: JSON.stringify(params), // 请求参数
       dataType: 'json', // 返回参数格式
       responseType: "blob", // 设置响应类型
       cache: false,
       processData: false, // 告诉jQuery不要去处理发送的数据
       contentType: 'application/json;charset=utf-8',
       success: function (data) {
           console.log(data);
           if(data.status != '0') {
               toast(data.message, 2000);
           } else {
               var pdfEntity = data.data; // 获取文件流
               var array = converData(pdfEntity); // 转码成 base64
               $("#demo").show()
               var pdfh5 = new Pdfh5('#pdf-content', {
                   data: array
               });
               // 监听完成事件
               pdfh5.on("complete", function (status, msg, time) {
                   // 处理插件不隐藏 loadEffect 的问题
                   $(".loadEffect").hide();
               })
           }
       },
       error: function () {
           toast('请求失败', 2000);
       },
       complete: function() {
           isLoading = false;
       }
   })
})
相关推荐
汪敏wangmin17 分钟前
Fiddler-抓包后直接生成Loadrunner脚本或者Jmeter脚本
前端·jmeter·fiddler
彤银浦1 小时前
Web学习笔记3
前端·笔记·学习·html5
江城开朗的豌豆1 小时前
退出登录后头像还在?这个缓存问题坑过多少前端!
前端·javascript·vue.js
江城开朗的豌豆1 小时前
Vue的'读心术':它怎么知道数据偷偷变了?
前端·javascript·vue.js
江城开朗的豌豆1 小时前
手把手教你造一个自己的v-model:原来双向绑定这么简单!
前端·javascript·vue.js
我在北京coding2 小时前
el-tree 懒加载 loadNode
前端·vue.js·elementui
江城开朗的豌豆2 小时前
v-for中key值的作用:为什么我总被要求加这个'没用的'属性?
前端·javascript·vue.js
angen20182 小时前
Ruby如何采集直播数据源地址
前端·chrome
goldenocean2 小时前
React之旅-05 List Key
前端·javascript·react.js
亮学长2 小时前
lodash不支持 Tree Shaking 而 lodash-es可以
大数据·前端·elasticsearch