uniapp在线预览pdf文件流pdf.js

背景:uniapp 开发微信公众号,需要加载显示后端返回的pdf文件流,后端接口返回的数据如下:
在这里插入图片描述

使用pdf.js解决:
1、官网下载pdf.js

注意:若页面空白,无报错信息,可以尝试下载别的版本的pdf.js文件
在这里插入图片描述

2、项目根目录下新建hybrid文件夹,将下载的pdf.js压缩包解压后,复制到hybrid下的html文件夹中

在这里插入图片描述

3、在pages文件夹中新建一个filePreview页面,页面代码如下:
<template>
	<view>
		<web-view :src="allUrl"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				viewerUrl: '/hybrid/html/web/viewer.html?file=',
				allUrl: '',
			}
		},
		onShow() {
			this.getPdf()
		},
		methods: {
			getPdf() {
				let params = {
					...
				}
				uni.request({
					url: `url`,
					method: 'POST',
					data: params,
					responseType: 'arraybuffer', //接口responseType设置为arraybuffer,这里记得设置响应数据格式,不然预览的pdf是空白
					success: (response) => {
						if (!response) {
							uni.showToast({
								title: "预览失败",
								duration: 2000
							});
						}
						let pdfData = response.data; //pdfData是后端返回的文件流
						let blob = new Blob([pdfData], {
							type: 'application/pdf'
						})
						pdfData = window.URL.createObjectURL(blob) //创建预览路径
						this.allUrl = this.viewerUrl+encodeURIComponent(pdfData)//从接口中拿到pdf文件流,并进行encodeURIComponent编码  (要拼接pdf对应的地址)
					},
					fail: err => {
						console.log(err)
					}
				});
			}
		}
	}
</script>
<style>
</style>
4、有些文章中是在前一个页面请求pdf信息,跳转filePreview页面传参展示,这种预览页面刷新时就预览不了了,原因是:
因为你使用了 blob url,blob url 不是永久的资源。
把 src 换成你本地的 public 资源。
blob url 相当于是通过 js 将一个 blob 文件共享了出来。如果blob被销毁,或者垃圾回收,那么就无法显示了。
因为项目业务需求是要手机能下载pdf文件,所以要用手机浏览器打开,所以就在预览页面加载了,增加加载前的动画即可。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值