更新记录

0.1.0(2026-06-13) 下载此版本

初次提交


平台兼容性

uni-app x(5.0)

Chrome Safari Android iOS 鸿蒙 微信小程序
×

其他

多语言 暗黑模式 宽屏模式
× ×

laoqianjunzi-pdf

laoqianjunzi-pdf 是一个面向 uni-app x 的 PDF 能力插件,提供以下两类能力:

  • 页面内嵌预览组件:适合在业务页中直接展示 PDF。
  • 受管 PDF 会话 API:适合在 App 端做翻页、批注、签名、导出图片、导出 PDF 等流程化处理。

插件同时提供了一个可直接运行的示例页:uni_modules/laoqianjunzi-pdf/pages/index

功能概览

  • 内嵌 PDF 预览组件 laoqianjunzi-pdf
  • 通过插件页面打开 PDF 预览 launchPdfPreview
  • 使用系统能力打开 PDF openPdfWithSystem
  • 选取 PDF 文件 pickPdf
  • 打开受管会话 openManagedPdf
  • 获取受管会话状态 getManagedPdfState
  • 受管会话翻页 moveManagedPdfPage previousManagedPdfPage nextManagedPdfPage
  • 添加文本批注/高亮/下划线/矩形批注 addPdfAnnotation
  • 添加签名图像 addPdfSignature
  • 导出整份 PDF exportManagedPdf
  • 导出指定页为图片 exportPdfPageImage
  • 清理插件临时文件 clearPdfTempFile

平台支持

能力 Android iOS Harmony Web
组件内嵌预览 支持 支持 支持 支持
launchPdfPreview 支持 支持 支持 支持
openPdfWithSystem 支持 支持 支持,本地路径优先系统打开 支持,浏览器新标签打开
pickPdf 支持 支持 当前版本不支持 支持
受管会话 openManagedPdf 支持 支持 支持 不支持
受管翻页 支持 支持 支持 不支持
批注/签名 支持 支持 支持 不支持
导出 PDF/页面图片 支持 支持 支持 不支持

说明:

  • Web 端当前定位为预览入口,不提供受管签批会话。
  • Harmony 端当前未接入原生文件选择器,因此 pickPdf 会直接返回失败回调。
  • Harmony 端 openPdfWithSystem 在非本地系统路径下会自动回退到插件预览页。

目录说明

uni_modules/laoqianjunzi-pdf/
├─ components/laoqianjunzi-pdf/laoqianjunzi-pdf.uvue  # 内嵌预览组件
├─ pages/index.uvue                                   # 综合演示页/插件预览页
├─ utssdk/index.uts                                   # API 导出入口
├─ utssdk/interface.uts                               # 类型定义
└─ hybrid/html/pdf-reader.html                        # 预览层页面

快速开始

1. 在页面中使用预览组件

<template>
  <view class="page">
    <laoqianjunzi-pdf
      class="pdf-viewer"
      :path="pdfPath"
      :quality="2"
      :zoom="1"
      :mode="'paged'"
      :show-toolbar="true"
      @load="handleLoad"
      @error="handleError"
      @pageChange="handlePageChange"
      ref="viewerRef"
    />
  </view>
</template>

<script setup lang="uts">
import { ref } from 'vue'

const pdfPath = ref('https://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf')

function handleLoad(_payload: Map<string, any>): void {
  console.log('PDF load ok')
}

function handleError(payload: Map<string, any>): void {
  console.log('PDF load fail', payload.get('errMsg'))
}

function handlePageChange(payload: Map<string, any>): void {
  console.log('page changed', payload.get('currentPage'), payload.get('totalPages'))
}
</script>

<style>
.page {
  flex: 1;
}

.pdf-viewer {
  flex: 1;
}
</style>

2. 在脚本中调用插件 API

import {
  launchPdfPreview,
  openManagedPdf,
  getManagedPdfState,
  exportManagedPdf,
  exportPdfPageImage
} from '@/uni_modules/laoqianjunzi-pdf'

launchPdfPreview({
  source: 'https://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf',
  title: '插件预览页'
})

openManagedPdf({
  source: '/storage/emulated/0/Download/demo.pdf',
  success: (_res) => {
    const state = getManagedPdfState()
    console.log('managed state', state)
  }
})

exportPdfPageImage({
  page: 1,
  outputPath: '',
  success: (res) => {
    console.log('image path', res.outputPath)
  }
})

exportManagedPdf({
  outputPath: '',
  includeMarkup: true,
  success: (res) => {
    console.log('pdf path', res.outputPath)
  }
})

组件 API

组件名称

  • laoqianjunzi-pdf

Props

属性 类型 默认值 说明
path string '' PDF 地址,支持本地路径、content://、网络 URL
quality number 2 预览清晰度,内部会限制在 14
zoom number 1 初始缩放,内部会限制在 0.54
mode 'paged' \| 'scroll' 'paged' 预览模式,分页或连续滚动
show-toolbar boolean true 是否显示内置工具栏

Events

事件名 回调参数 说明
load Map<string, any> PDF 成功加载后触发,errMsg 固定为成功信息
error Map<string, any> 加载失败时触发,可从 errMsg 读取错误信息
pageChange Map<string, any> 当前页变化时触发,包含 currentPagetotalPages

组件实例方法

通过 ref 获取组件实例后可调用以下方法:

方法名 参数 返回值 说明
reload() boolean 重新按当前参数渲染
goToPage(page) number boolean 跳转到指定页,页码从 1 开始
previousPage() boolean 跳到上一页
prevPage() boolean previousPage() 的同义方法
nextPage() boolean 跳到下一页
getCurrentPageIndex() number 获取当前页码
getTotalPages() number 获取总页数

页面 API

launchPdfPreview(options)

打开插件内置页面 uni_modules/laoqianjunzi-pdf/pages/index

参数:

字段 类型 必填 说明
source string PDF 地址
title string \| null 预览页标题
success (res) => void 成功回调
fail (err) => void 失败回调
complete (res) => void 完成回调

说明:

  • 该页面支持通过 pathtitle 查询参数直接打开。
  • Web、Android、iOS、Harmony 都支持该预览入口。

openPdfWithSystem(options)

交给系统默认能力打开 PDF。

参数:

字段 类型 必填 说明
source string PDF 地址
success (res) => void 成功回调
fail (err) => void 失败回调
complete (res) => void 完成回调

说明:

  • Web 端会通过浏览器新标签页打开。
  • Harmony 端当路径不适合系统直接打开时,会回退到插件预览页。

pickPdf(options)

让用户选择一个 PDF 文件。

返回:

字段 类型 说明
errMsg string 成功信息
path string 选中的 PDF 路径

说明:

  • Android、iOS、Web 支持。
  • Harmony 当前版本返回 1111,需要业务侧自行选取文件后再把路径传给插件。

受管会话 API

以下能力主要用于 App 端对 PDF 做进一步处理。使用顺序通常为:

  1. openManagedPdf
  2. getManagedPdfState
  3. moveManagedPdfPage / previousManagedPdfPage / nextManagedPdfPage
  4. addPdfAnnotation / addPdfSignature
  5. exportPdfPageImage / exportManagedPdf
  6. closeManagedPdf

openManagedPdf(options)

打开一份受管 PDF 会话。

字段 类型 必填 说明
source string PDF 地址
password string \| null 密码保护 PDF 的密码

成功回调返回:

字段 类型 说明
pageCount number 总页数
currentPage number 当前页码
sourcePath string 传入路径
resolvedPath string 插件内部解析后的可访问路径

getManagedPdfState()

返回当前受管会话状态,没有会话时返回 null

字段 类型 说明
pageCount number 总页数
currentPage number 当前页码
sourcePath string 原始路径
resolvedPath string 解析路径
signatureCount number 已加入的签名数量
annotationCount number 已加入的批注数量

moveManagedPdfPage(options)

跳转到指定页,页码从 1 开始。

字段 类型 必填 说明
page number 目标页码
animated boolean \| null 预留参数

previousManagedPdfPage()nextManagedPdfPage()

切换受管会话当前页。

addPdfAnnotation(options)

添加批注。

字段 类型 必填 说明
page number 页码,从 1 开始
kind 'highlight' \| 'underline' \| 'rectangle' \| 'text' 批注类型
x number 批注左上角横坐标
y number 批注左上角纵坐标
width number 批注宽度
height number 批注高度
text string \| null 文本批注内容
color string \| null 颜色值,例如 #1F2937

addPdfSignature(options)

添加签名图片。

字段 类型 必填 说明
page number 页码,从 1 开始
imagePath string 签名图片本地路径
x number 签名左上角横坐标
y number 签名左上角纵坐标
width number \| null 签名宽度
height number \| null 签名高度

exportManagedPdf(options)

导出当前受管 PDF。

字段 类型 必填 说明
outputPath string 输出路径,传空字符串时由原生侧决定默认路径
includeMarkup boolean \| null 是否把批注与签名一起导出

成功回调返回:

字段 类型 说明
errMsg string 成功信息
outputPath string 导出的 PDF 路径

exportPdfPageImage(options)

导出指定页为图片。

字段 类型 必填 说明
page number 页码,从 1 开始
outputPath string 输出路径,传空字符串时由原生侧决定默认路径
format 'png' \| 'jpeg' \| null 图片格式
quality number \| null 图片质量

closeManagedPdf()

关闭当前受管会话。

clearPdfTempFile(path?)

清理插件临时文件。

  • 传入 path 时清理指定临时文件。
  • 不传时由平台侧按插件实现策略清理。

错误码

错误码 含义
1101 当前平台不支持该能力
1102 传入的 PDF 路径或参数无效
1103 PDF 密码无效
1104 页码不合法或超出范围
1105 PDF 渲染失败
1106 导出失败
1107 签名图片资源无效
1108 用户取消选择或未拿到选择结果
1109 受管会话未就绪
1110 无法使用系统预览或系统打开能力
1111 当前页面环境或平台不支持文件选择
1112 远程 PDF 下载失败

示例页说明

插件自带综合演示页:uni_modules/laoqianjunzi-pdf/pages/index

这个页面会展示:

  • PDF 地址输入与示例链接填充
  • 组件内嵌预览
  • 组件翻页、缩放、质量、模式切换
  • 受管会话打开与状态同步
  • 批注、签名、导出图片、导出 PDF
  • 插件页预览与系统打开能力

如果你只想把这个页面当作纯预览页使用,也可以直接带参数打开:

/uni_modules/laoqianjunzi-pdf/pages/index?path=<编码后的PDF地址>&title=<编码后的标题>

使用建议

  • 页面内嵌阅读优先使用组件 laoqianjunzi-pdf
  • 业务流程需要签批、导出、状态查询时,优先使用受管会话 API。
  • 仅需要快速打开文件时,优先调用 launchPdfPreviewopenPdfWithSystem
  • App 端建议先验证 PDF 源路径可访问,再调用受管会话 API。
  • 需要签名时,请先准备好本地签名图片路径,再调用 addPdfSignature

隐私、权限声明

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

网络访问、文件读取与写入权限按业务场景使用

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

插件不采集用户数据,PDF 处理默认在本地或业务指定地址完成

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

许可协议

MIT协议