移动端浏览器 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;
       }
   })
})
相关推荐
Sayai9 分钟前
不重新打包,vim 直接改 jar 包内的前端文件:原理、步骤与避坑
前端·vim·jar
IT_陈寒14 分钟前
SpringBoot自动配置失效时我差点把电脑扔了
前端·人工智能·后端
何何____28 分钟前
web方向js考核题解
开发语言·前端·javascript
风骏时光牛马29 分钟前
AI面试复盘:沉淀经验,找准求职短板
前端
liangshanbo121529 分钟前
面试题终极整理:手写 Promise.all / Promise.allSettled
前端·javascript·promise
心易行者29 分钟前
用HTML在线运行搭后台管理系统:5个核心模块+0服务器,3天跑通完整业务
大数据·前端·网络·人工智能·python
单线程1213840 分钟前
从案例分析 Vue3 Tokenizer+Parser 源码五
前端·javascript·vue.js
神奇的程序员1 小时前
Apple Watch S12,送一台
前端
moonsims2 小时前
Voliro 无人机-Aerial Mobile Robot(空中移动机器人):把无人机从“飞过去拍摄”,升级成“飞过去并与目标物理接触、测量甚至操作”
前端·人工智能·安全·无人机·量子计算
晴天163 小时前
Chrome 控制台(DevTools)竟是用 HTML 写的?-Day41
前端·chrome·html