当前位置: 首页 > news >正文

uniapp h5本地预览pdf教程 (含白屏|跨域解决方案)

第一步 下载pdf.js

很多pdf.js版本在真机ios环境都会白屏

经测试后2.5.207版本比较稳定,Android和IOS环境PDF文件都能加载成功

下载地址
 https://github.com/mozilla/pdf.js/releases/tag/v2.5.207icon-default.png?t=N7T8https://github.com/mozilla/pdf.js/releases/tag/v2.5.207
第二步 解压移动pdfjs文件至项目中
 

在根目录static中创建html文件夹 , 将解压出来的pdfjs文件移动至html文件夹目录下

第三步 创建pdf文件预览页面preview.vue
 

远程pdf文件地址可能会有跨域问题,这里使用转文件流的方式进行处理,可根据实际业务逻辑改写

<template><web-view :src="pdfUrl" v-if="pdfUrl"></web-view>
</template><script>import request from '@/common/request.js';export default {data() {return {viewerUrl: '/static/html/web/viewer.html', //用来渲染PDF的htmlpdfUrl: '' // 最终显示在web-view中的路径}},onLoad(option) {console.log('=>进入了PDF预览页面')console.log('获取的参数=>', option,decodeURIComponent(option.src))let url = decodeURIComponent(option.src)let data = {url}uni.showLoading({mask:true})//使用pdf网络地址请求文件流信息,解决跨域问题uni.request({url:request.baseUrl+'/h5/loadByUrl', //域名拼接data: data,method: 'post',responseType: 'arraybuffer', //这里记得设置响应数据格式,不然预览的pdf是空白header: {"authorization": uni.getStorageSync('token') // 携带的token},success: (response) => {uni.hideLoading()console.log(response)let pdfData = response.data; //pdfData是后端返回的文件流	//创建blob数据流let blob = new Blob([ pdfData], {type: 'application/pdf;charset=UTF-8'})pdfData = window.URL.createObjectURL(blob)this.pdfUrl = `${this.viewerUrl}?file=${decodeURIComponent(pdfData)}`;},})//若没有pdf网络地址跨域问题可直接加载pdf// this.pdfUrl = `${this.viewerUrl}?file=${decodeURIComponent(url)}`;},}
</script>

第四步  实际场景中获取pdf地址并跳转至预览页

uni.navigateTo({url:`/pages/index/preview?src=${encodeURIComponent(pdf网络地址)}`
})

预览效果

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C++ primer plus 第17 章 输入、输出和文件:文件输入和输出03:文件模式:二进制文件
  • 图解大顶堆的构建、排序过程
  • 猫头虎 分享已解决Bug || 504 Gateway Timeout 解决方案
  • 手绘图系列 06 | 您一上Google就能接触到的Tries
  • FPGA设计之跨时钟域(CDC)设计篇(5)----同步FIFO的两种设计方法(计数器法/高位扩展法 | 手撕代码)
  • ArcGIS Pro 3.1学习之旅 ----day01 Arcgis pro安装
  • 苍穹外卖day12(day15)---数据统计——Excel报表(项目完结)
  • 使用FFmpeg实现摄像头RTMP实时推流
  • clickhouse安装部署问题求大佬看看
  • 科技云报道:“大模型+机器人”,具身智能将开启“智械时代”
  • 萌啦数据软件价格多少,萌啦数据软件价格是多少
  • Web 安全之 RCE(Remote Code Execution)攻击详解
  • LVS 负载均衡
  • KAN卷积神经网络来了!全新混合架构已开源,训练速度狂飙16倍
  • 学习C#-接口
  • 4个实用的微服务测试策略
  • Date型的使用
  • Java深入 - 深入理解Java集合
  • laravel with 查询列表限制条数
  • Python 基础起步 (十) 什么叫函数?
  • SAP云平台里Global Account和Sub Account的关系
  • SQLServer之创建显式事务
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Twitter赢在开放,三年创造奇迹
  • 来,膜拜下android roadmap,强大的执行力
  • 手写一个CommonJS打包工具(一)
  • 数据结构java版之冒泡排序及优化
  • 算法---两个栈实现一个队列
  • 一个SAP顾问在美国的这些年
  • nb
  • ionic异常记录
  • 仓管云——企业云erp功能有哪些?
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2022 CVPR) Unbiased Teacher v2
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (6)设计一个TimeMap
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (过滤器)Filter和(监听器)listener
  • (篇九)MySQL常用内置函数
  • (转) RFS+AutoItLibrary测试web对话框
  • .net6 webapi log4net完整配置使用流程
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET分布式缓存Memcached从入门到实战
  • .NET开源快速、强大、免费的电子表格组件
  • .NET命名规范和开发约定
  • .net下简单快捷的数值高低位切换