更新记录

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 官方仓库。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络访问;Android 本地 PDF 文件读取(受系统存储策略限制);iOS 网络访问说明

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无