更新记录
0.2.19(2026-09-08)
- 新增 uni-app x / uni-app Vue3 鸿蒙 App 入口,复用内置 PDF.js。
- 原生下载与文件读取,带确认的分块传输,支持鉴权请求头和下载进度。
- 保留翻页、页码、末页事件;切换文件或卸载时取消旧下载并隔离过期消息。
- 鸿蒙资源编译及浏览器边界测试通过;真机验证范围见 readme。
0.2.18(2026-09-04)
- 修复:普通 uni-app Vue2/Vue3 组件补齐
prevPage()和nextPage()实例方法,解决调用时提示is not a function - 修复:Vue3 Demo 改为显式导入普通 uni-app 组件,避免 easycom 误匹配同名 uni-app x UTS 入口后出现空组件
- 文档:补充普通 uni-app Vue2/Vue3 的显式导入示例
0.2.17(2026-09-01)
- 新增:普通 uni-app App 传入外网 HTTP/HTTPS PDF URL 时,插件自动调用
uni.downloadFile下载到本地再交给 PDF.js 渲染 - 新增:uni-app x Android/iOS 可直接传入外网 URL,原生组件内部自动下载,业务代码不再需要手写下载流程
- 新增:
header鉴权请求头、downloadTimeout下载超时和@downloadProgress下载进度事件 - 新增:App 本地路径兼容
tempFilePath、file://、绝对路径、static/...、/static/...和_www/... - 兼容:Android 插件声明明文 HTTP 访问,iOS 增加 ATS 与网络访问配置
- 兼容:iOS 最低版本调整为 15.0,插件源码及原生 framework 已通过 Xcode 27 编译验证
- 已知:HBuilderX 5.15 的 iOS 自动生成模板会向 Xcode 27 传入不兼容的
-ld64,出现library 'd64' not found时请使用修复后的 HBuilderX 或 Xcode 26 - 示例:本地统一使用
lshort-zh-cn.pdf,外网统一使用清华镜像 PDF URL
平台兼容性
uni-app(5.0)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | - | 5.0 | 15 | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | 15 | √ | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
view-pdf 本地 PDF / 外网 URL 查看器
view-pdf 0.2.19 支持普通 uni-app Vue2/Vue3 和 uni-app x,PDF 来源统一为两类:本地文件与外网 HTTP/HTTPS URL。
核心能力
- App 直接传入外网 HTTP/HTTPS PDF URL,插件自动下载到本地后渲染
- 支持
header传递 Token、Cookie 等鉴权请求头 - 支持
tempFilePath、file://、绝对文件路径、static/...、/static/...、_www/... - 支持
@downloadProgress下载进度 - 内置 PDF.js 3.11.174、worker 和中文 CMap,不依赖线上 CDN
paged分页、scroll连续滚动、quality、zoom、页码跳转与末页事件
平台行为
| 平台 | 外网 URL | 本地文件 | 渲染方式 |
|---|---|---|---|
| uni-app Vue2/Vue3 H5 | 直接请求,服务器需 CORS | 支持静态资源、Blob URL、Data URL | PDF.js |
| uni-app Vue2/Vue3 Android/iOS App | 默认自动下载,不受浏览器 CORS 限制 | 支持 | PDF.js |
| uni-app x Web | 直接请求,服务器需 CORS | 支持静态资源、Blob URL、Data URL | PDF.js |
| uni-app x Android App | 组件内自动下载 | 支持 | PdfRenderer |
| uni-app x iOS App | 组件内自动下载 | 支持 | PDFKit |
| uni-app Vue3 HarmonyOS App | 默认原生下载 | 代码包、应用可读的沙盒文件 | WebView + PDF.js |
| uni-app x HarmonyOS App | 默认原生下载 | 代码包、应用可读的沙盒文件 | WebView + PDF.js |
H5 页面不能直接读取用户电脑上的任意绝对路径。请把 PDF 放入项目
static目录,或通过文件选择器得到File后传入URL.createObjectURL(file)。
外网 URL
普通 uni-app Vue2/Vue3 请显式导入 Vue 组件,避免 easycom 匹配到同名的 uni-app x UTS 入口:
<template>
<PdfViewer
class="viewer"
url="https://mirrors.tuna.tsinghua.edu.cn/CTAN/info/lshort/chinese/lshort-zh-cn.pdf"
:header="{ Authorization: 'Bearer your-token' }"
:download-timeout="120000"
@downloadProgress=""
@load="onLoad"
@error="onError"
/>
</template>
<script setup>
import PdfViewer from '@/uni_modules/view-pdf/components/view-pdf/view-pdf.vue'
const = (event) => console.log(event.progress)
const onLoad = () => console.log('PDF 加载成功')
const onError = (event) => console.error(event.errMsg)
</script>
<style>
.viewer { width: 100%; height: 80vh; }
</style>
App 端会自动下载外网 PDF;H5 端仍由 PDF.js 直接请求,因此 PDF 服务器需要开启 CORS,HTTPS 页面也不能加载 HTTP PDF。
本地 PDF
打包在工程 static 目录的文件:
<view-pdf class="viewer" url="/static/lshort-zh-cn.pdf" />
App 下载或选择后得到的本地文件:
pdfUrl.value = result.tempFilePath
uni-app x App 也可直接传 URL,不再需要业务层手写 uni.downloadFile:
<view-pdf
class="viewer"
:url="pdfUrl"
:header="requestHeader"
@downloadProgress=""
/>
Props
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
url |
String | '' |
HTTP/HTTPS URL 或本地文件路径 |
header |
Object | {} |
PDF 请求头,App 传给 uni.downloadFile,Web 传给 PDF.js |
autoDownload |
Boolean | true |
App 是否将远程 PDF 自动下载到本地 |
downloadTimeout |
Number | 120000 |
App 下载超时,单位 ms |
quality |
Number | 2 |
渲染清晰度 1-4 |
zoom |
Number | 1 |
可见缩放 0.5-4 |
mode |
String | paged |
paged 分页,scroll 连续滚动 |
Events
| 事件 | 说明 |
|---|---|
load |
PDF 解析并渲染成功 |
error |
下载、路径或渲染失败,返回 errMsg |
downloadProgress |
App 下载进度,返回 progress、totalBytesWritten、totalBytesExpectedToWrite |
pageChange |
页码变化,currentPage 从 0 开始 |
lastPage |
进入最后一页或滚动到末尾 |
方法
goToPage(pageIndex)prevPage()nextPage()getCurrentPageIndex()getTotalPages()
App 端注意事项
- Android 版插件已包含
INTERNET和明文 HTTP 访问配置。 - iOS 版已包含 ATS 与网络访问配置。
- iOS 最低支持版本为 15.0,插件源码及原生 framework 已通过 Xcode 27 编译验证。
- HBuilderX 5.15 的 iOS 自动生成模板会向 Xcode 27 传入不兼容的
-ld64。如果遇到library 'd64' not found,请使用修复后的 HBuilderX 或 Xcode 26;该报错与插件源码无关。 - uni-app x App 使用 UTS 原生组件,请制作包含本插件的自定义调试基座。
- 插件不上传 PDF,不采集 PDF 内容或用户数据。
HarmonyOS 鸿蒙 App(0.2.19 新增)
适用于纯血鸿蒙 App,支持 uni-app x 和普通 uni-app Vue3。Vue2 受 DCloud 框架限制,需迁移 Vue3 后运行鸿蒙;本功能不包含鸿蒙元服务。
- 建议使用 HBuilderX 5.15 或更高版本,按 DCloud 文档配置 DevEco Studio、鸿蒙工程目录及签名。鸿蒙工程使用不含中文和空格的路径。
- 页面用法、props、
load/error/pageChange/lastPage/downloadProgress事件保持一致;鸿蒙页码查询方法同步返回数字,页码从 0 开始。 - 本地支持
static/a.pdf、/static/a.pdf、./static/a.pdf、uni_modules/...代码包路径以及文件 API 返回的、应用有权限读取的本地路径。不支持 Android/iOS 专有的_www、_doc路径,也不支持浏览器 Blob URL。 - 默认
autoDownload=true:使用uni.downloadFile携带header下载,随后通过uni.getFileSystemManager().readFile读取文件。WebView 保持加载代码包内的 HTML、PDF.js、worker、CMap 和 uni.webview SDK,PDF 内容以分块消息传入,避开代码包与沙盒目录的 WebView 访问限制。 autoDownload=false:网络 PDF 由 WebView 直接请求,服务器需要允许 CORS,此模式不提供原生下载进度;本地 PDF 仍使用文件 API 读取。- 修改地址或显示参数会重建阅读器,卸载会取消未完成下载,旧实例的消息不会影响新文件。未加载时翻页返回
false。 - PDF 内容读取时会保留 Base64 副本,超大文件的内存占用高于原生逐页渲染;优先使用
mode="paged"。连续滚动沿用 PDF.js 阅读器原有的前 30 页上限;超过 30 页请使用分页模式,滚动模式不会误报末页。
验证范围
已通过 HBuilderX 5.15 的 uni-app x / Vue3 鸿蒙资源编译,以及传输协议、过期请求隔离和错误处理测试。浏览器边界测试通过了内置 139 页中文 PDF 的分块读取、渲染、翻页、末页事件和 H5 回归;该测试模拟鸿蒙消息接口,不等同于鸿蒙真机验证。另外已生成鸿蒙原生工程并构建出未签名 .hap,设备安装因未配置包名和签名证书未完成。实际发布前需要配置签名,并在鸿蒙 App 中验证文件读取和 WebView 通信。
官方参考:鸿蒙 App、WebView、文件管理器。内置 uni.webview.1.5.8.js 来自 DCloud 官方仓库。

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 172
赞赏 0
下载 12640089
赞赏 1950
赞赏
京公网安备:11010802035340号