uniapp开发app在当前页面预览pdf文件

试了很多方法,在插件市场上也找了很多插件,pdf可以显示出来,但都是铺满了整个屏幕,没有放到我指定的容器里面去,使用webview也是一整个页面,搞了几天,看了uniapp官方文档,终于解决,我是使用了此种方法

App端web-view的扩展

App端的webview是非常强大的,可以更灵活的控制和拥有更丰富的API。

每个vue页面,其实都是一个webview,而vue页面里的web-view组件,其实是webview里的一个子webview。这个子webview被append到父webview上。

通过以下方法,可以获得这个web-view组件对应的js对象,然后参考HTML5+ API Reference,可以进一步重设这个web-view组件的样式,比如调整大小

官方代码

<template>
	<view>
	</view>
</template>
<script>
var wv;//计划创建的webview
export default {
	onLoad() {
		// #ifdef APP-PLUS
		wv = plus.webview.create("","custom-webview",{
			plusrequire:"none", //禁止远程网页使用plus的API,有些使用mui制作的网页可能会监听plus.key,造成关闭页面混乱,可以通过这种方式禁止
      'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
			top:uni.getSystemInfoSync().statusBarHeight+44 //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
		})
		wv.loadURL("https://www.baidu.com")
		var currentWebview = this.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效
		currentWebview.append(wv);//一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭
		setTimeout(function() {
			console.log(wv.getStyle())
		}, 1000);//如果是首页的onload调用时需要延时一下,二级页面无需延时,可直接获取
		// #endif
	}
};
</script>

我借助了在线PDF播放器预览 - DCloud 插件市场这个插件里的js文件

	viewerUrl: '/static/hybrid/html/web/viewer.html',
	pdfUrl:'' //pdf文件

  //创建
   wv = plus.webview.create("", "custom-webview", {
	 plusrequire: "none",
	 'uni-app': 'none',
	 right: 20,
	 top: 130,
	 height: 400,
	 width: 720,
    })
    this.purl = `${this.viewerUrl}?file=${encodeURIComponent(this.pdfUrl)}`;
	wv.loadURL(this.purl)
	var currentWebview = this.$scope.$getAppWebview();
	currentWebview.append(wv);

 //隐藏
    wv.hide();
 //显示
    wv.show()
 //销毁
    wv.close();
	wv = null;

### 三、实现 PDF 文件预览的方法 在 UniApp 开发 App 时,如果需要预览从后端接口获取的 PDF 文件流,可以通过 `web-view` 组件结合 PDF.js 来实现。由于小程序和 App 端不支持直接渲染 PDF 文件流,因此需要借助 WebView 加载 HTML 页面来展示 PDF 内容。 在页面中使用 `web-view` 组件,并通过 URL 传递 PDF 文件流地址。例如,可以创建一个 `.vue` 文件,配置 `web-view` 组件并动态拼接 URL,实现 PDF 的在线预览功能: ```vue <template> <view style="width: 100%; height: 90vh;"> <web-view :src="allUrl"></web-view> </view> </template> <script> export default { data() { return { allUrl: '', viewerUrl: '/hybrid/html/web/viewer.html' // viewer.html 文件路径 }; }, onLoad(params) { let fileUrl = encodeURIComponent(decodeURIComponent(params.fileUrl)); // 解码传入的 PDF 地址 this.allUrl = this.viewerUrl + '?file=' + fileUrl; // 拼接 PDF 文件路径 } }; </script> ``` 在上述代码中,`viewer.html` 是一个基于 PDF.js 的 HTML 文件,用于加载和渲染 PDF 文件流。通过 `web-view` 组件加载该 HTML 文件,并将实际的 PDF 文件地址作为参数传递给它,即可实现 PDF 的在线预览[^2]。 此外,如果需要从接口获取 PDF 文件流,可以在请求成功后拼接 URL 并赋值给 `web-view`: ```javascript onLoad(params) { uni.showLoading({ title: '加载中' }); this.$http.request({ url: `https://api.example.com/get-pdf`, method: 'post', }).then(res => { this.allUrl = this.viewerUrl + '?file=' + encodeURIComponent(res.data.pdfUrl); uni.hideLoading(); }).catch(() => { uni.hideLoading(); }); } ``` 通过这种方式,可以确保在 App 端(包括 Android 和 iOS)实现 PDF 文件流的预览功能,同时支持缩放、翻页等基本阅读操作[^3]。 ### 三、兼容性与注意事项 - **PDF.js 版本问题**:在使用 PDF.js 时,需要注意版本兼容性问题。某些版本的 PDF.js 在 UniApp 中可能会出现报错,例如 `Setting up fake worker failed: “pattern.at is not a function”`。可以通过更新 PDF.js 版本或修改 worker 配置来解决此类问题[^1]。 - **文件路径问题**:确保 `viewer.html` 和 PDF.js 的路径正确,并且放置在 `hybrid/html/web` 目录下,以便 `web-view` 正确加载。 - **跨域问题**:如果 PDF 文件流来自外部服务器,需确保服务器配置了正确的 CORS 策略,否则可能无法加载 PDF 文件- **性能优化**:PDF 文件较大时,加载速度可能较慢,建议对 PDF 文件进行压缩或分页加载优化。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值