uniapp + vue2 + pfdjs + web-view 实现安卓、iOS App PDF预览

文章目录

概要

在使用uniapp开发安卓、iOS APP的时候遇到一个需求,预览PDF,特此记录

  1. 下载pdfjs 解压到static文件夹中 pdfjs
  2. githup地址

技术栈

uniapp + vue2 + pfdjs + webview

完整代码

javascript 复制代码
<template>
  <view class="pdf-module" style="width: 100%; height: 100vh">
    <web-view :src="allUrl" :webview-styles="webviewStyles"></web-view>
  </view>
</template>
<script>
export default {
  data() {
    return {
      allUrl: '',
      viewerUrl: '/static/pdf/web/viewer.html',
      webviewStyles: {
        progress: { color: '#007aff' }
      }
    }
  },
  onLoad(option) {
    const encodedPdfUrl = encodeURIComponent(option.url)
    const baseUrl = this.getBaseUrl()
    this.allUrl = `${baseUrl}${this.viewerUrl}?file=${encodedPdfUrl}`
  },
  methods: {
    getBaseUrl() {
      const platform = uni.getSystemInfoSync().platform
      return platform === 'ios' ? '/' : ''
    }
  }
}
</script>
<style scoped>
.pdf-module {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
</style>

效果图

小结

javascript 复制代码
注释 / 删除 同源校验逻辑
// 原错误代码(大概1802行)
if (fileOrigin !== viewerOrigin) {
  throw new Error('file origin does not match viewer\'s');
}

// 修改后(注释掉校验)
// if (fileOrigin !== viewerOrigin) {
//   throw new Error('file origin does not match viewer\'s');
// }
相关推荐
FungLeo1 小时前
成为全栈·Vue 管理后台篇·Vue Router如何守住多角色后台边界
前端·javascript·vue.js·rbac·vue router·路由守卫·前端权限
FungLeo1 小时前
成为全栈·Vue 管理后台篇·分页只显示第一页:从接口total 定位到前端修复
前端·vue.js·状态模式·分页·naive ui·服务端分页·前端问题排查
ZhengEnCi2 小时前
苹果滑动为什么有「肉感」:橡皮筋越界阻尼与弹簧动画的物理原理
前端
Moment2 小时前
不会后期的我,发现了一个开源胶片神器😍😍😍
前端·后端·开源
L1mbo2 小时前
Lite模式 缓解微信开发者工具卡顿,附 uni-app 实践方案
前端·微信小程序
FungLeo2 小时前
成为全栈·Vue管理后台篇·仪表盘不是几张卡片:组合统计接口与角色视图
前端·javascript·vue.js·rbac·仪表盘·管理后台·tanstack query
SameX2 小时前
HarmonyOS 做桌面卡片 onAddForm 要同步返回但数据在数据库里的解法
前端
deli0073 小时前
手机夜景模式为什么要举 3 秒?8 帧 RAW 堆栈 SNR 实测
前端
松仔log3 小时前
Kotlin中级——callbackFlow
java·前端·kotlin
三小河3 小时前
SWC 凭什么比 Babel 快 ?项目优化迁移踩坑记录
前端·后端