微信小程序预览PDF文件
两种场景:
1、对于url返回的文件流,先downloadfile,然后再预览
2、直接返回可预览的URL地址
3、小程序后台,需要配置:开发管理-开发设置-服务器域名(request合法域名,uploadFile合法域名,业务域名)
第一种,download之后,可以获取到一个本地临时地址,wx.openDocument可以直接打开文档
JavaScript Code复制内容到剪贴板
- // #ifdef MP
- // 仅限于微信小程序可用
- this.$store.dispatch('user/downloadFile', {
- url: graceRequestConfig.apiBaseUrl + 'user/protocol'
- }).then(filePath => {
- console.log('下载成功', filePath)
- // 新开页面打开文档,pdf预览
- wx.openDocument({
- filePath: filePath,
- // 展示菜单在手机右上角,可提供保存功能
- showMenu: true,
- success: function(res) {
- console.log('打开文档成功')
- }
- })
- }).catch(err => {
- console.log(err)
- })
- // #endif
- / vuex的action添加一个:
- downloadFile: async function({
- state,
- commit,
- rootState
- }, params) {
- // 获取实时数据
- return new Promise((resolve, reject) => {
- const token = '1234'
- const header = {}
- header['auth'] = 'Auth ' + token;
- uni.downloadFile({
- url: params.url,
- header: header,
- success: (res) => {
- if (res.statusCode === 200) {
- resolve(res.tempFilePath)
- }else{
- reject(res)
- }
- },
- fail:function(e){
- console.log('下载失败')
- reject(e)
- }
- });
- })
- },
相关文档:https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html
https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html
第二种,有url之后,需要在web-view打开,可以自由开发页面,依赖,pdf.js
下载:http://mozilla.github.io/pdf.js/getting_started/
1、前往 pdf.js 的 官网 下载库文件,我们下载哪个版本都是可以的,后者适用于旧版浏览器,我这里下载的后者。
2、下载完成后,因为微信小程序打包的限制,我将库文件放到云服务器上,如果想测试可以联系我提供测试资源,H5 可以放到本地。目录如下:
这里注意一下:PDF.js访问远程服务器报file origin does not match viewer's
简单粗暴的方法就是把viewer.js的判断远程地址的代码注释掉即可。
JavaScript Code复制内容到剪贴板
- // if (fileOrigin !== viewerOrigin) {
- // throw new Error("file origin does not match viewer's");
- // }
3、通过web目录下 viewer.html 查看器 + pdf文件路径预览pdf文件
XML/HTML Code复制内容到剪贴板
- <web-view :webview-styles="webviewStyles" :src="url"></web-view>
- <script>
- export default {
- data() {
- return {
- webviewStyles: {
- progress: {
- color: '#ff0a22'
- },
- url: ''
- }
- //.....
- </script>
可以前端直接跳到webview页面
JavaScript Code复制内容到剪贴板
- const url = encodeURIComponent('https://xxxxx.com/web/viewer.html?file=https://static.xxx.com/zhongqizhongbao/qianshuwenjian.pdf')
- uni.navigateTo({
- url: '/pages/ucenter/protocol?title=签署文件&href='+url,
- success: res => {},
- fail: () => {},
- complete: () => {}
- });