移动端浏览器 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;
       }
   })
})
相关推荐
掘金安东尼6 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼6 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea8 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo8 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队9 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher9 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati9 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao9 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
兆子龙10 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙11 小时前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构