移动端浏览器 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;
       }
   })
})
相关推荐
美狐美颜sdk4 小时前
跨平台直播美颜sdk集成攻略:Android、iOS与Web的统一方案
android·前端·ios
Airser4 小时前
npm启动Taro框架报错
前端·npm·taro
Anlici5 小时前
连载小说大学生课设 需求&架构
前端·javascript·后端
乘风!5 小时前
前端Jquery,后端Java实现预览Word、Excel、PPT,pdf等文档
pdf·word·excel·jquery
2501_938769996 小时前
React Server Components 进阶:数据预取与缓存
前端·react.js·缓存
我有一棵树6 小时前
浏览器使用 <embed> 标签预览 PDF 的原理
pdf·embed
蒜香拿铁6 小时前
Angular【基础语法】
前端·javascript·angular.js
xiaoxiao无脸男7 小时前
纯css:一个好玩的按钮边框动态动画
前端·css·css3
rookie_fly7 小时前
基于Vue的数字输入框指令
前端·vue.js·设计模式
元直数字电路验证7 小时前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net