uni-app预览pdf(适配多端)

前言

今天有个功能要在当前页面预览pdf,并且适配多端,研究了好久,也踩了好多坑,写个文章记一下,也给各位避避坑~

uni-app预览pdf

1.下载pdf.js

官方下载地址(有坑!待会儿说)

外部下载地址

2.使用步骤

static 文件夹下新建 pdf 文件夹,将解压文件放进 pdf 文件夹下

(听说这里也有坑:放到根目录下后,无法打开预览的pdf文件)

在当前需要预览的vue页面中,先将文件链接下载为本地文件,代码如下:

js 复制代码
openPdfFn(url) {
    uni.downloadFile({
		//需要预览的文件地址
		url: url,
		success: (res) => {
			if (res.statusCode === 200) {
				//下载成功,得到文件临时地址
				console.log('下载成功', res.tempFilePath);

				//条件编译,若为h5端则直接赋值文件地址			
				// #ifdef H5
				let newUrl = res.tempFilePath
				// #endif

				//条件编译,若为App端,则需要将本地文件系统URL转换为平台绝对路径	
				// #ifdef APP-PLUS
				let newUrl = plus.io.convertLocalFileSystemURL(res.tempFilePath)
				// #endif

				//这里新建一个vue页面,跳转并预览pdf文档
				uni.navigateTo({
					url: "/pages/userInfo/showPdf?url=" + newUrl,
				})
			}
		}
	})
},

这是新建的vue页面,用于web-view预览pdf文件,代码如下:

js 复制代码
<template>
	<view>
		<web-view :src="showUrl"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				showUrl: "",
				viewerUrl: '/static/pdf/web/viewer.html', //刚解压的文件地址,用来渲染PDF的html
			}
		},
		onLoad(e) {
			this.showUrl = this.viewerUrl + '?file=' + e.url //将插件地址与接收的文件地址拼接起来
		},
	}
</script>

<style></style>

成功预览

现在讲讲官方地址下载的坑

先说我在官方地址下载的pdf.js报了什么错:Promise.withResolvers is not a function

最终一路排查为版本兼容性问题:原因是新版pdf.js中使用了此方法,但node.js从V22.0.0开始支持此方法

解决方案:

  1. 降低pdf.js版本
  2. 提高node.js版本
相关推荐
前端开发爱好者1 小时前
尤雨溪官宣:"新玩具" 比 Prettier 快 45 倍!
前端·javascript·vue.js
欧阳呀1 小时前
Vue+element ui导入组件封装——超级优雅版
前端·javascript·vue.js·elementui
weixin_402486344 小时前
直接将ppt导出成pdf 图片失真严重,选中整个图片和需要的对象后保存成图片,格式选择为.svg
pdf
TextIn智能文档云平台4 小时前
LLM 文档处理:如何让 AI 更好地理解中文 PDF 中的复杂格式?
人工智能·pdf
liliangcsdn4 小时前
使用Deepseek解析PDF文件
pdf
Red Car4 小时前
如何向文件夹内所有PDF增加水印
python·pdf
华仔啊4 小时前
用 Vue3 + Canvas 做了个超实用的水印工具,同事都在抢着用
前端·vue.js·canvas
Q_Q5110082854 小时前
python+uniapp基于微信小程序团购系统
spring boot·python·微信小程序·django·uni-app·node.js·php
炒毛豆4 小时前
uniapp微信小程序+vue3基础内容介绍~(含标签、组件生命周期、页面生命周期、条件编译(一码多用)、分包))
vue.js·微信小程序·uni-app
岁月宁静5 小时前
在 Vue 3.5 中优雅地集成 wangEditor,并定制“AI 工具”下拉菜单(总结/润色/翻译)
前端·javascript·vue.js