更新记录
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 - 受管会话翻页
moveManagedPdfPagepreviousManagedPdfPagenextManagedPdfPage - 添加文本批注/高亮/下划线/矩形批注
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 |
预览清晰度,内部会限制在 1 到 4 |
zoom |
number |
1 |
初始缩放,内部会限制在 0.5 到 4 |
mode |
'paged' \| 'scroll' |
'paged' |
预览模式,分页或连续滚动 |
show-toolbar |
boolean |
true |
是否显示内置工具栏 |
Events
| 事件名 | 回调参数 | 说明 |
|---|---|---|
load |
Map<string, any> |
PDF 成功加载后触发,errMsg 固定为成功信息 |
error |
Map<string, any> |
加载失败时触发,可从 errMsg 读取错误信息 |
pageChange |
Map<string, any> |
当前页变化时触发,包含 currentPage 和 totalPages |
组件实例方法
通过 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 |
否 | 完成回调 |
说明:
- 该页面支持通过
path与title查询参数直接打开。 - 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 做进一步处理。使用顺序通常为:
openManagedPdfgetManagedPdfStatemoveManagedPdfPage/previousManagedPdfPage/nextManagedPdfPageaddPdfAnnotation/addPdfSignatureexportPdfPageImage/exportManagedPdfcloseManagedPdf
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。
- 仅需要快速打开文件时,优先调用
launchPdfPreview或openPdfWithSystem。 - App 端建议先验证 PDF 源路径可访问,再调用受管会话 API。
- 需要签名时,请先准备好本地签名图片路径,再调用
addPdfSignature。

收藏人数:
https://gitee.com/laoqianjunzi/laoqianjunzi-pdf.git
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 1151
赞赏 2
下载 12242066
赞赏 1922
赞赏
京公网安备:11010802035340号