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

第一步 下载pdf.js

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

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

下载地址
https://github.com/mozilla/pdf.js/releases/tag/v2.5.207https://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的html
				pdfUrl: '' // 最终显示在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网络地址)}`
})

预览效果

相关推荐
码兄科技1 天前
24小时自助健身房系统软件开发实战指南:功能设计与部署方案
java·spring boot·uni-app
2501_916007471 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview
huaweichenai2 天前
spring boot操作PDF
java·spring boot·pdf
2501_916008892 天前
如何实现iOS App代码混淆:SwiftShield使用指南
android·ios·小程序·https·uni-app·iphone·webview
2501_916008892 天前
怎么用 Godot 导出 iOS 应用并上架 App Store?签名字段该填什么?
android·ios·小程序·https·uni-app·iphone·webview
开开心心就好2 天前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
郑州光合科技余经理2 天前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
白远山3 天前
城市电竞陪玩调度系统实战:从派单算法到多端协同的架构拆解
java·架构·uni-app·需求分析
泡海椒3 天前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
白远山3 天前
上海24小时自助健身房系统软件开发实战指南
java·架构·uni-app·需求分析