更新记录
1.0.0(2026-10-16)
- 新增 PDF/TXT 系统原生预览与 DOCX/XLS/XLSX/CSV/TSV 社区离线结构化预览。
- 新增 35 种 Office 格式接入路线,按端侧直读、社区离线与私有转换分层处理。
- 新增本地路径、Android
content://、iOS security-scoped URL、鉴权 URL、全屏预览和 uni-app xnative-view嵌入。 - 新增 uni-app 与 uni-app x 双宿主 API,以及进度、取消、预取、缓存清理和会话状态查询能力。
- 新增私有内网转换服务部署方案,支持进度查询、超时、PDF 文件头与转换产物 SHA-256 校验。
- 新增主题、起始页、阅读方向、文字水印、工作表切换、Provider 能力清单和统一错误回调。
- 新增随包交付的社区渲染资源、宏与外链隔离、格式能力限制、双宿主示例和 26 类错误码说明。
平台兼容性
uni-app(5.15)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | × | × | - | - | √ | √ | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
uni-app x(5.15)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | √ | √ | × | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 | 蒸汽模式 |
|---|---|---|---|
| × | × | × | √ |
lizhao-office-view
介绍
让用户在 Android、iOS App 内阅读合同、报表和办公附件,兼容 uni-app 与 uni-app x。无需跳转 WPS,文件也不必交给公网预览服务。
先看你的文件属于哪一种:
| 文件 | 如何预览 | 是否需要服务 |
|---|---|---|
| PDF、TXT | 端侧原生查看器 | 不需要,本地文件可离线打开 |
| DOCX、XLS、XLSX、CSV、TSV | 插件自带社区阅读资源,提供只读结构化预览 | 不需要,本地文件可离线打开 |
| DOC、PPT、PPTX 等其他 28 种格式 | 客户私有服务转为 PDF,再在 App 内阅读 | 需要可达的私有转换服务 |
合计覆盖 35 种格式的接入路线,其中 7 种可在端侧离线预览,28 种需要私有转换。社区阅读器以内容可读为目标,复杂排版、图表和特殊字体可能与 Office 不同。PPT/PPTX 暂不提供端侧离线渲染。
平台、格式和文件大小限制请查看本文后半部分;端侧能力与私有转换边界请结合目标平台和实际文件样本验收。
功能特色
| 特色 | 帮你解决什么问题 | 使用入口 |
|---|---|---|
| App 内打开文档 | 阅读附件后返回原业务页面 | openOfficeDocument |
| 本地与网络来源 | 打开应用可读的本地文件、内容 URI 或鉴权 URL | source |
| 常用格式离线阅读 | 无网络时查看已保存的 PDF/TXT/DOCX 和常用表格 | system / community |
| 私有内网转换 | 让 DOC、PPT、模板等文件在自己的网络内处理 | converter |
| 阅读外观 | 配置标题、主题、起始页、阅读方向和显示水印 | viewer |
| 任务控制 | 查看阶段进度,取消任务或关闭文档 | onProgress、取消/关闭 API |
| 提前准备文件 | 先下载或转换,稍后使用返回的本地路径打开 | prefetchOfficeDocument |
| 能力与状态查询 | 判断服务是否可用,查询会话阶段和页码 | 能力/状态 API |
| 清理临时文件 | 按会话或文件时间清理插件缓存 | clearOfficeCache |
请求源文件和访问转换服务使用独立请求头。插件不主动上传文件到公共 SaaS,不执行文档宏;本地社区资源随 App 打包,不加载 CDN。
适合哪些场景
| 业务场景 | 建议做法 | 阅读位置 |
|---|---|---|
| OA 审批、合同附件 | 先用全屏 API 打开一个 PDF | 快速开始、模块一 |
| 仓库报表、巡检记录 | 使用本地 DOCX、Excel 或 CSV | 模块二 |
| 政务、企业内网档案 | 私有转换服务处理 DOC、PPT 和扩展格式 | 模块三 |
| 登录后才能下载的附件 | 给源文件配置临时请求头 | 模块四 |
| 品牌化阅读页 | 调整标题、主题和文字水印 | 模块五 |
| 附件列表、详情页预加载 | 预取文件并保存返回的本地路径 | 模块六 |
| 页面退出或用户取消 | 保存会话 ID,关闭或取消本会话 | 模块七 |
| uni-app x 页面内阅读 | 使用标准模式原生组件,完成宿主联调 | 模块八 |
文档编辑、Office 批注写回、电子签章、全文搜索、目录书签、密码解锁、批量多文档切换和防截屏不在当前承诺范围。需要 PDF 签批或文件选择,可查看底部相应作者插件。
下载与导入
- 发布前使用作者提供的源码目录;正式上架后从插件市场导入。将完整的
uni_modules/lizhao-office-view放入项目,不要改名或只复制utssdk。 - 先选全屏 API 接入。普通 uni-app 使用
.vue页面脚本,uni-app x 使用.uvue和lang="uts"。 - 只从插件根目录导入:
import * as OfficeView from '@/uni_modules/lizhao-office-view'
- 准备一个应用确实有读取权限的本地 PDF/TXT。不要直接照搬另一台设备的路径;Android 系统选择器返回的
content://也可以传入source.path。 - 在包含插件原生实现的 App 中运行。首次接入需完成对应平台原生联编或制作自定义基座;后续仅修改业务页面、示例和文档,可复用已匹配的原生包。详见“自定义基座说明”。
项目最低工具要求见 package.json 的 engines。Android 插件最低 API 24,iOS 最低系统版本为 12;如果宿主还有其他插件,最终最低版本以整个 App 的合并配置为准。
接入方式选择
| 需求 | 推荐方式 | 边界 |
|---|---|---|
| 绝大多数附件预览 | 全屏 openOfficeDocument |
uni-app / uni-app x 共用 API |
| 文档放入自己的业务布局 | uni-app x 标准模式 <lizhao-office-view> |
使用 native-view,需宿主验证 |
| 普通 uni-app Vue 页面 | 全屏 API | 不要把 .vue 组件当作内嵌阅读器 |
| uni-app NVue 组件入口 | 当前保留兼容封装 | 尚未接通原生 View 绑定,不承诺内嵌显示 |
完整示例路径
先阅读 uni_modules/lizhao-office-view/example/readme.md,再按项目类型注册对应页面:
- uni-app:
uni_modules/lizhao-office-view/example/uniapp/index.vue - uni-app x:
uni_modules/lizhao-office-view/example/uniappx/index.uvue - uni-app x 标准模式组件:
uni_modules/lizhao-office-view/components/lizhao-office-view/lizhao-office-view.uvue - uni-app/NVue 兼容封装:
uni_modules/lizhao-office-view/components/lizhao-office-view/lizhao-office-view.vue
示例按文件来源、35 种格式卡片、私有服务配置、任务日志四个区域组织。在线样例需要联网,URL 可能失效;内网或离线验收请使用自己的可读文件。示例不会内置可用的转换服务或真实凭据。
从基础到进阶:按业务模块使用
5 分钟跑通:打开一个本地文档
先把下面的完整示例放到已经注册的页面,输入应用可读的绝对路径或 Android 内容 URI,再点击按钮。文件选择和授权由业务页面负责;插件不包含文件选择器。
uni-app:按钮打开全屏预览
<template>
<view>
<input v-model="filePath" placeholder="应用可读的本地 PDF/TXT 路径" />
<button @click="openDocument">打开文档</button>
<text>{{ message }}</text>
</view>
</template>
<script>
import * as OfficeView from '@/uni_modules/lizhao-office-view'
export default {
data() {
return { filePath: '', message: '', sessionId: '' }
},
onUnload() {
if (this.sessionId.length === 0) return
OfficeView.closeOfficeDocument({
sessionId: this.sessionId,
fail: (err) => console.error('关闭文档', err.errCode, err.errMsg)
})
},
methods: {
openDocument() {
if (this.filePath.trim().length === 0) {
this.message = '请先填写本地文件路径'
return
}
OfficeView.openOfficeDocument({
source: { path: this.filePath.trim() },
viewer: { title: '附件预览', theme: 'system' },
: (event) => {
this.sessionId = event.sessionId
this.message = event.message
},
success: (res) => { this.message = '文档首屏已显示' },
fail: (err) => { this.message = `${err.errCode}:${err.errMsg}` },
complete: () => console.log('打开文档调用完成')
})
}
}
}
</script>
uni-app x:相同 API,使用 UTS
<template>
<view>
<input v-model="filePath" placeholder="应用可读的本地 PDF/TXT 路径" />
<button @click="openDocument">打开文档</button>
<text>{{ message }}</text>
</view>
</template>
<script setup lang="uts">
import * as OfficeView from '@/uni_modules/lizhao-office-view'
const filePath = ref<string>('')
const message = ref<string>('')
let sessionId = ''
function openDocument(): void {
if (filePath.value.trim().length == 0) {
message.value = '请先填写本地文件路径'
return
}
OfficeView.openOfficeDocument({
source: { path: filePath.value.trim() },
viewer: { title: '附件预览', theme: 'system' },
: (event) => {
sessionId = event.sessionId
message.value = event.message
},
success: (res) => { message.value = '文档首屏已显示' },
fail: (err) => { message.value = `${err.errCode}:${err.errMsg}` },
complete: () => console.log('打开文档调用完成')
})
}
onUnload(() => {
if (sessionId.length == 0) return
OfficeView.closeOfficeDocument({
sessionId,
fail: (err) => console.error('关闭文档', err.errCode, err.errMsg)
})
})
</script>
taskId 是每次异步 API 调用立即返回的任务标识,用来关联调用日志;sessionId 是文档预览会话标识,从进度或结果回调获取,用于关闭、取消、状态查询。两者不能互换。success 表示首屏已经可见,complete 表示本次调用已结束,都不代表用户已经关闭文档。
以下模块沿用上面的 OfficeView 根目录导入。路径、网络地址和临时凭据需由你的业务提供;网络示例域名用于说明配置,不是可用演示服务器。
模块一:合同、制度和文本附件
本地 PDF/TXT 直接使用快速开始中的写法。下载接口没有扩展名时,补上 fileName 和 fileType;插件仍会检查真实文件内容。
OfficeView.openOfficeDocument({
source: {
url: 'https://files.intranet.example/attachments/contract',
fileName: '合同.pdf',
fileType: 'pdf'
},
viewer: { title: '合同预览', startPage: 1 },
success: (res) => console.log('首屏已显示', res.sessionId, res.pageCount),
fail: (err) => console.error(err.errCode, err.errMsg, err.suggestion)
})
网络文件会先下载到 App 私有目录。想要真正离线使用,应先保存文件并传入 source.path;“阅读资源不访问 CDN”不意味着网络文件无需下载。
模块二:Word 合同与 Excel 报表
docx、xls、xlsx、csv、tsv 使用随插件打包的社区资源。把快速开始中的路径换为对应本地文件即可,也可显式限制阅读方式:
OfficeView.openOfficeDocument({
source: { path: '/storage/emulated/0/Download/report.xlsx', fileType: 'xlsx' },
renderer: { provider: 'community', strictProvider: true },
success: (res) => console.log('报表已显示', res.sessionId),
fail: (err) => console.error(err.errCode, err.errMsg)
})
DOCX 使用 docx-preview + JSZip;XLS/XLSX/CSV/TSV 使用 SheetJS CE。表格支持工作表切换与横纵滚动,不把工作表数量伪装成分页;复杂公式、图表、批注和排版不保证与桌面 Office 一致。
iOS community 单文件上限为 20MB;Android 原生社区容器和共享渲染脚本的单文件上限为 50MB。超过对应上限返回 9200024。还存在解压、工作表、行列等保护限制,文件小于此大小不代表一定能渲染。大文件或复杂版式可选择私有转换。
模块三:内网 DOC、PPT 与扩展格式
doc、ppt、pptx 及格式矩阵中的其余转换格式,需要自己的内网服务。服务源码和部署说明位于 uni_modules/lizhao-office-view/intranet-service/README.md。
OfficeView.openOfficeDocument({
source: {
url: 'https://files.intranet.example/training.pptx',
fileName: '培训课件.pptx',
fileType: 'pptx'
},
converter: {
baseUrl: 'https://office-view.intranet.example',
headers: { Authorization: 'Bearer <当前会话临时令牌>' },
timeoutMs: 120000
},
renderer: { provider: 'converter', strictProvider: true },
: (event) => console.log(event.stage, event.progress),
success: (res) => console.log('转换后的 PDF 已显示', res.sessionId),
fail: (err) => console.error(err.errCode, err.errMsg, err.suggestion)
})
文件上传到你配置的服务,由服务转为 PDF 后返回。保留内网 HTTPS 和正确证书配置;“私有部署”仍需设备能够访问服务。未配置转换服务时返回明确错误,不会改用公网服务。
模块四:登录后可见的业务附件
源文件和转换服务的鉴权分别配置,不共用令牌:
OfficeView.openOfficeDocument({
source: {
url: 'https://files.intranet.example/attachments/report',
fileName: '报表.xlsx',
fileType: 'xlsx',
headers: { 'X-Document-Ticket': '<当前会话文件票据>' }
},
renderer: { provider: 'community', strictProvider: true },
: (event) => console.log(event.stage, event.bytesCompleted),
success: (res) => console.log('鉴权附件已显示', res.sessionId),
fail: (err) => console.error(err.errCode, err.errMsg)
})
需要转换时再添加 converter.headers。临时票据应在调用时取得,不要写入源码、日志或示例文件。
模块五:阅读主题、页码与文字水印
在 openOfficeDocument 的 viewer 中按需配置:
import { OfficeViewerOptions } from '@/uni_modules/lizhao-office-view'
const viewerOptions: OfficeViewerOptions = {
title: '内部资料',
startPage: 1,
scrollMode: 'vertical',
theme: 'system',
watermark: { text: '内部资料 · 仅供阅读', opacity: 0.12, rotation: -25 }
}
将 viewer: viewerOptions 合并到模块一的调用。light/dark/system 分别为浅色、深色、跟随系统。显示水印不会写回源文档,也不等于防截屏;具体格式对阅读方向和页码的支持以阅读器为准。
PDF/DOCX 的 startPage 定位到对应文档页,超出范围时定位到末页;TXT 固定为 1 / 1。社区表格的 startPage 选择工作表序号,currentPage/pageCount 表示当前工作表和工作表总数,界面不显示纸张页码。首次可见回调及状态查询均以实际显示位置为准。阅读器成功态可从“更多”菜单重新加载;失败后应关闭,再由业务重新调用打开 API。
模块六:先准备文件,再进入详情页
预取只准备本地文件,不打开页面。后续用返回的 localPath 打开,避免再次访问原 URL:
OfficeView.prefetchOfficeDocument({
source: {
url: 'https://files.intranet.example/guide.pdf',
fileType: 'pdf'
},
success: (prepared) => {
// 实际业务可保存路径,进入详情页时再执行下面的打开操作。
OfficeView.openOfficeDocument({
source: { path: prepared.localPath, fileType: prepared.format },
success: (res) => console.log('本地文件已显示', res.sessionId),
fail: (err) => console.error('打开失败', err.errCode, err.errMsg)
})
},
fail: (err) => console.error('预取失败', err.errCode, err.errMsg)
})
当前 cacheHit 返回 false,不承诺相同 URL 自动命中缓存。cache.enabled、cache.maxAgeSeconds 和 source.checksum 是保留字段,当前原生路径尚未应用;不要用它们实现“禁止落盘”、自动过期或源文件完整性校验。转换产物自己的 SHA-256 校验与这些保留字段不同。
临时文件可能被系统或 clearOfficeCache 清理,使用前需允许预取失败后重试。清理全部缓存应在没有活动预览时执行,避免删除正在使用的文件。
模块七:进度、取消、关闭与排障
打开时保存 onProgress 中的会话 ID,再将其传入下列 API。以下函数可加入 UTS 页面;普通 uni-app 去掉类型标注即可。
function cancelPreview(sessionId: string): void {
if (sessionId.length == 0) return
OfficeView.cancelOfficeTask({
sessionId,
success: () => console.log('任务已取消'),
fail: (err) => console.error(err.errCode, err.errMsg)
})
}
function inspectPreview(sessionId: string): void {
if (sessionId.length == 0) return
OfficeView.getOfficeSessionState({
sessionId,
success: (state) => console.log(state.state, state.currentPage, state.pageCount),
fail: (err) => console.error(err.errCode, err.errMsg)
})
}
OfficeView.getOfficeCapabilities({
success: (res) => console.log(res.platform, res.providers, res.limitations),
fail: (err) => console.error(err.errCode, err.errMsg)
})
用户退出页面时使用快速开始中的 closeOfficeDocument。需要清理过期临时文件时,可调用 clearOfficeCache({ olderThanSeconds: 86400, success: (res) => console.log(res.removedFiles), fail: (err) => console.error(err.errMsg) })。
关闭与取消都会释放本会话的全屏或嵌入查看器。关闭操作本身成功后,会话状态为 closed;若原打开或预取尚未结束,原请求以 9200009 结束一次。原请求已经成功时,不会因关闭再次触发失败。取消操作成功与原请求取消回调分别对应各自的任务,不应把取消成功当作文档已显示。
完整示例底部提供“复制详细日志”和“复制下一段日志”。反馈问题时说明文件格式、来源、运行端、报错阶段和错误码;不要发送未脱敏的业务文档或凭据。
模块八:uni-app x 页面内嵌入阅读
标准模式 .uvue 可用 <lizhao-office-view>,给组件明确的高度和可读取的 source。组件负责会话绑定与释放,事件为 ready/progress/error/closed,方法为 reload/close/cancel。
<template>
<lizhao-office-view
style="height: 500px;"
:source="documentSource"
@ready="onDocumentReady"
@error="onDocumentError"
/>
</template>
<script setup lang="uts">
import { OfficeViewFail } from '@/uni_modules/lizhao-office-view'
const documentSource = { path: '/storage/emulated/0/Download/guide.pdf', fileType: 'pdf' }
function onDocumentReady(): void { console.log('文档已显示') }
function onDocumentError(error: OfficeViewFail): void {
console.error('预览失败', error.errCode, error.errMsg)
}
</script>
将示例路径替换为当前应用可读的真实路径。此入口使用 native-view,需要在对应 uni-app x 标准模式宿主中验证;独立原生 APK 不包含这段宿主绑定流程。普通 uni-app Vue 页面继续使用全屏 API。当前不承诺蒸汽模式组件兼容。
API 用途速查
| API | 用途 |
|---|---|
openOfficeDocument |
打开全屏或已绑定原生承载的文档,返回任务ID |
closeOfficeDocument |
按会话关闭预览并释放资源 |
cancelOfficeTask |
按会话取消在途任务 |
prefetchOfficeDocument |
先下载或转换,成功后取得本地路径 |
clearOfficeCache |
清理指定会话或过期缓存 |
getOfficeCapabilities |
查询端侧与已配置服务的能力 |
getOfficeSessionState |
查询会话阶段、进度和页码 |
createOfficeViewNativeContext |
uni-app x 原生组件的承载适配入口;一般业务优先使用全屏API或同名组件 |
API、参数与返回值
openOfficeDocument(options): string
打开文档并返回任务 ID。只有文档校验完成、查看器已挂载、首屏已渲染且真实可见后才触发 success。
| 参数 | 类型 | 必填 | 说明 | 默认值 | 可选参数 |
|---|---|---|---|---|---|
source.path |
string |
与 url 二选一 |
本地路径或平台内容 URI | - | 本地路径、content:// |
source.url |
string |
与 path 二选一 |
HTTP/HTTPS 文件地址 | - | 合法 HTTPS/内网 HTTP |
source.fileName |
string |
否 | 用于格式提示的文件名 | 空 | 任意安全显示名 |
source.fileType |
string |
否 | 文件格式提示;各 Provider 仍按真实内容校验 | 自动识别 | 格式矩阵中的 35 种格式 |
source.headers |
UTSJSONObject |
否 | 下载源文件的临时请求头 | 空 | 客户业务头 |
source.checksum |
string |
否 | 保留字段,当前原生路径未应用;不能用于验证源文件 | 未应用 | - |
converter.baseUrl |
string |
转换格式必填 | 私有转换服务地址;社区格式仅在需要转换降级时填写 | - | HTTP/HTTPS |
converter.headers |
UTSJSONObject |
否 | 转换服务临时鉴权头 | 空 | Authorization 等 |
converter.timeoutMs |
number |
否 | 转换超时毫秒数 | 60000 |
大于 0 |
renderer.provider |
OfficeProviderName |
否 | 选择预览 Provider | auto |
auto、system、community、converter、libreoffice |
renderer.strictProvider |
boolean |
否 | 是否只使用显式指定的 Provider;false 时失败后可尝试下一可用 Provider |
false |
true、false |
viewer.title |
string |
否 | 阅读器标题 | 文件名 | 业务文档名称 |
viewer.startPage |
number |
否 | 起始文档页;社区表格为工作表序号,TXT 固定为 1;超出范围钳制到末项 | 1 |
正整数 |
viewer.embedded |
boolean |
否 | 是否由 uni-app x native-view 嵌入承载;直接调用 API 时需在进度回调取得 sessionId 后绑定原生上下文 |
false |
true、false |
viewer.scrollMode |
string |
否 | 滚动方向 | vertical |
vertical、horizontal |
viewer.theme |
string |
否 | 查看器主题 | system |
light、dark、system |
viewer.watermark |
OfficeWatermarkOptions |
否 | 只覆盖显示层,不修改源文件 | 无 | 文本、颜色、透明度、旋转 |
cache.enabled |
boolean |
否 | 保留字段,当前原生路径未应用,不用于禁止落盘 | 未应用 | true、false |
cache.maxAgeSeconds |
number |
否 | 保留字段,当前原生路径未应用,不自动删除过期文件 | 未应用 | - |
onProgress |
function |
否 | 阶段、字节、页码和真实进度 | 无 | - |
success/fail/complete |
function |
否 | 单终态标准回调 | 无 | - |
其他 API
| API | 作用 | 返回值 |
|---|---|---|
closeOfficeDocument |
关闭会话并释放查看器、文件和网络资源 | 任务 ID |
cancelOfficeTask |
取消下载、上传、转换或渲染任务 | 任务 ID |
prefetchOfficeDocument |
下载/转换并返回本地路径,不打开查看器 | 任务 ID |
clearOfficeCache |
清理全部或指定会话缓存 | 任务 ID |
getOfficeCapabilities |
查询端侧与可选转换服务能力 | 任务 ID |
getOfficeSessionState |
查询状态、阶段、进度与页码 | 任务 ID |
所有公开页码从 1 开始;没有活动页面时 currentPage 为 0。社区表格的 currentPage/pageCount 是工作表序号/总数,不代表打印页数;选择工作表后查询返回实际选中项。
关闭、取消和状态查询传入 { sessionId, success, fail };这里的 sessionId 使用打开/进度回调的值,不是 API 立即返回的任务 ID。clearOfficeCache 可传 sessionId 和 olderThanSeconds 限定清理范围;getOfficeCapabilities 可传 converter 查询已配置服务。
| 回调结果 | 主要字段 | 业务用途 |
|---|---|---|
| 打开成功 | sessionId、format、pageCount、localPath、visible |
保存会话,确认首屏可见 |
| 预取成功 | sessionId、format、localPath、cacheHit |
用本地路径再次打开;当前 cacheHit 为 false |
| 进度 | sessionId、stage、progress、bytesCompleted、bytesTotal、page、pageCount、message |
显示处理阶段与当前页 |
| 状态查询 | sessionId、state、stage、progress、currentPage、pageCount |
查询当前会话,避免页面自行推测 |
| 清理成功 | sessionId、freedBytes、removedFiles |
显示实际释放量,0 表示本次没有删除对应缓存 |
| 能力查询 | platform、nativeViewer、converterClient、formats、providers、limitations |
根据运行环境决定显示哪些入口 |
| 关闭/取消成功 | sessionId、taskId |
确认命令对应的会话与任务 |
| 失败 | errSubject、errCode、errMsg |
显示可辨识错误并用于诊断 |
错误码说明
errSubject 固定为 lizhao-office-view。按失败阶段排查输入、下载、转换或渲染,不把取消当作成功。
| 错误码 | 含义 | 常见处理 |
|---|---|---|
9200001 |
参数无效 | 检查 path/url、页码和超时 |
9200002 |
当前平台不支持 | 根据 capabilities 隐藏入口 |
9200003 |
数据源不可访问 | 检查路径、URI 授权 |
9200004 |
文件类型不支持 | 检查格式矩阵 |
9200005 |
文件类型与内容不一致 | 不要只修改扩展名 |
9200006 |
TLS 或网络连接失败 | 检查证书、DNS、内网连通性 |
9200007 |
文件下载失败 | 检查源站鉴权与状态码 |
9200008 |
文件超过大小上限 | 调整服务限制或压缩文件 |
9200009 |
操作已取消,或尚未完成的请求被关闭 | 结合取消/关闭操作与会话状态决定是否重试 |
9200010 |
缺少内网转换服务配置 | 配置 converter |
9200011 |
内网转换服务不可用 | 检查服务健康和网关 |
9200012 |
文档转换失败 | 检查文档与 LibreOffice 日志摘要 |
9200013 |
预览产物无效 | 清理缓存并重新转换 |
9200014 |
文档受密码保护 | 提示用户提供无密码副本 |
9200015 |
文档已损坏 | 使用 Office 工具修复源文件 |
9200016 |
端侧渲染失败 | 检查设备内存和系统版本 |
9200017 |
缓存读写失败 | 检查存储空间 |
9200018 |
会话状态冲突 | 避免重复关闭或复用旧会话 |
9200019 |
操作超时 | 检查文件大小与服务负载 |
9200020 |
目标格式引擎未安装 | 检查服务的 Writer/Calc/Impress |
9200021 |
社区预览 Provider 当前不可用 | 检查自定义基座是否包含社区资源 |
9200022 |
社区预览尚未验证该文件格式 | 改用 auto 或配置转换服务 |
9200023 |
社区预览渲染失败 | 检查文件内容,允许时降级到转换服务 |
9200024 |
文档超过社区预览安全限制 | 缩小文件或改用私有转换服务 |
9200025 |
已阻止文档中的外部内容 | 移除外链,或使用受控的私有转换服务 |
9200026 |
可用预览 Provider 已全部尝试失败 | 根据失败阶段检查源文件、基座和转换服务 |
失败对象还包含 stage、recoverable、sessionId、taskId、nativeCode 和 suggestion。
注意事项
Provider 选择
Provider 表示本次使用的阅读方式,默认 auto。普通业务无需主动指定。
| Provider | 适用文件 | 边界 |
|---|---|---|
system |
pdf、txt |
端侧直读 |
community |
docx、xls、xlsx、csv、tsv |
端侧结构化预览,有大小与复杂度限制 |
converter |
33 种非 PDF/TXT 格式 | 需要客户私有服务,输出静态 PDF |
libreoffice |
预留端侧引擎 | 当前不可用;与服务端 LibreOffice 转换不是一回事 |
strictProvider 默认为 false。社区路径失败且已配置转换服务时,可按原生路由尝试转换;设为 true 时限定显式选中的 Provider。getOfficeCapabilities 用于探测入口能力,不能替代某份文档的真实打开结果。
内网转换服务接入
服务位于 uni_modules/lizhao-office-view/intranet-service。按该目录 README 配置临时令牌、LibreOffice 容器、内网网关和文件限制,再查询能力。源代码包含以下端点:
GET /v1/capabilities
POST /v1/preview-jobs
GET /v1/preview-jobs/{jobId}
GET /v1/preview-jobs/{jobId}/artifact
DELETE /v1/preview-jobs/{jobId}
设备要能够访问 converter.baseUrl。请用自己的 DOC/PPT/模板样本确认字体、分页和转换效果,再接入实际业务。
格式支持矩阵
| 层级 | 格式 | 当前行为 |
|---|---|---|
| 端侧直读 | pdf |
Android PdfRenderer / iOS PDFKit 端侧预览 |
| 端侧直读 | txt |
UTF-8、UTF-16、GB18030 端侧预览 |
| 社区离线 | docx |
docx-preview + JSZip 只读结构化预览;复杂分页可能与 Office 有差异 |
| 社区离线 | xls、xlsx |
SheetJS CE 只读表格预览;限制工作表、行列与单元格大小 |
| 社区离线 | csv、tsv |
SheetJS CE 只读表格预览;单元格以纯文本输出 |
| 私有转换 | doc |
私有内网转换为 PDF 后内置预览 |
| 私有转换 | ppt、pptx |
私有内网转换为 PDF 后内置预览 |
| 私有转换 | odt、ott、fodt |
私有内网转换为 PDF 后内置预览 |
| 私有转换 | ods、ots、fods |
私有内网转换为 PDF 后内置预览 |
| 私有转换 | odp、otp、fodp |
私有内网转换为 PDF 后内置预览 |
| 私有转换 | rtf |
私有内网转换为 PDF 后内置预览 |
| 静态转换 | docm、dot、dotx、dotm |
私有内网静态转换;不执行宏 |
| 静态转换 | xlsm、xlt、xltx、xltm |
私有内网静态转换;不执行宏 |
| 静态转换 | pptm、pps、ppsx、ppsm |
私有内网静态转换;不执行宏 |
| 静态转换 | pot、potx、potm |
私有内网静态转换;不执行宏 |
| 暂不支持 | xlsb、WPS、iWork、HTML/XML/Markdown |
需要真实固定语料和独立转换验证后加入 |
| 暂不支持 | OFD、XPS、DjVu、Visio | 需要独立渲染引擎 |
宏和模板中的可执行内容不会运行。转换服务以 LibreOffice 最高宏安全级别启动,并关闭外部链接加载;格式识别以文件内容为准,扩展名只作为提示。xlsb 当前不在能力清单中,不能通过传入 fileType: 'xlsb' 绕过。
权限、隐私与平台差异
| 运行端 | 状态 | 说明 |
|---|---|---|
| uni-app Android | 支持 | Vue2/Vue3 全屏 API;NVue 内嵌未闭环 |
| uni-app iOS | 支持 | 全屏 API;NVue 内嵌未闭环 |
| uni-app x Android | 提供实现 | 全屏 API;标准模式 native-view 组件需宿主验证 |
| uni-app x iOS | 提供实现 | 全屏 API;标准模式 native-view 组件需宿主验证 |
| Harmony | 不支持 | 返回 9200002,不显示空白页 |
| Web | 不支持 | 返回 9200002 |
| 微信小程序 | 不支持 | 返回 9200002 |
| 支付宝小程序 | 不支持 | 返回 9200002 |
Android 只声明网络权限,content:// 权限由宿主选择文件时授予。iOS 只在访问期间持有 security-scoped 权限。缓存位于 App 私有目录。插件不会打印令牌、请求头或文档正文。
自定义基座说明
本插件包含 Android Kotlin、Activity、Manifest、AndroidX 依赖,以及 iOS Swift、PDFKit 和原生控制器。首次接入或修改这些原生文件、依赖、Manifest 或打包阅读资源后,需重新原生联编;使用自定义基座的项目必须重打对应自定义基座并重新安装。
仅修改业务页面、示例文字和文档,可复用源码匹配的原生包,无需每轮制作自定义基座。独立本地原生验收 APK 可先验证 Android 阅读器效果,但不能替代 uni-app / uni-app x 宿主的 UTS 调用链、组件绑定或 iOS 验收。静态语法和 appResource 结果也不代表真机功能通过。
作者系列 UTS 插件
以下为作者已在 DCloud 插件市场上架的 UTS 插件,可按业务场景组合使用。最新发布内容可查看作者主页。
| 插件 | 能力方向 | 插件市场 |
|---|---|---|
lizhao-app-keepalive |
应用保活、唤醒、自愈与报告 | 查看插件 |
lizhao-bg-audio |
背景音频播放、队列、倍速与事件 | 查看插件 |
lizhao-ble |
BLE 扫描、连接、读写、通知与自动重连 | 查看插件 |
lizhao-call-kit |
电话、短信、通讯录原生能力 | 查看插件 |
lizhao-camera-pro |
原生相机、拍照录像、水印与媒体保存 | 查看插件 |
lizhao-cast-screen |
DLNA 投屏、AirPlay 路由入口 | 查看插件 |
lizhao-choose-file |
原生文件选择、上传、进度与取消 | 查看插件 |
lizhao-device-id |
设备标识、隐私策略与诊断 | 查看插件 |
lizhao-doc-corrector |
文档扫描、矫正、增强与识别 | 查看插件 |
lizhao-emu-detect |
模拟器环境检测、风险评分与证据 | 查看插件 |
lizhao-float-window |
悬浮窗、画中画、权限与诊断 | 查看插件 |
lizhao-gallery-pro |
相册媒体分页、筛选、缩略图与导出 | 查看插件 |
lizhao-hce-card |
NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 | 查看插件 |
lizhao-health |
健康数据授权、查询、统计与写入 | 查看插件 |
lizhao-icon-pro |
SVG 图标组件、多主题与缓存 | 查看插件 |
lizhao-nfc-pro |
NFC 标签读写、NDEF、IsoDep 与诊断 | 查看插件 |
lizhao-notify-pro |
本地通知、点击动作、进度与定时提醒 | 查看插件 |
lizhao-novel-reader |
原生小说阅读、仿真翻页与段落评论 | 查看插件 |
lizhao-pdf-pro |
PDF 阅读、签批、真实写回与页面处理 | 查看插件 |
lizhao-scan-pro |
原生扫码、连续扫码、相册识别 | 查看插件 |
lizhao-serial-port |
路径串口、USB 串口、多会话收发与诊断 | 查看插件 |
lizhao-share-plus |
系统分享、远程文件下载后分享 | 查看插件 |
lizhao-smart-tts |
系统 TTS、云端合成、听书方案 | 查看插件 |
lizhao-sqlite-pro |
原生 SQLite、迁移、备份与诊断 | 查看插件 |
lizhao-sse-pro |
SSE、Line、JSONL 与 Raw 流式请求 | 查看插件 |
lizhao-tcp-pro |
TCP 客户端、服务端、多连接与诊断 | 查看插件 |
lizhao-usb-storage |
U 盘、移动硬盘文件浏览、读写与批量复制 | 查看插件 |
lizhao-video-editor |
视频裁剪、压缩、取帧与 FFmpeg/FFprobe | 查看插件 |
lizhao-video-feed |
短视频上下滑、短剧选集与分页加载 | 查看插件 |
lizhao-video-thumb |
视频封面、批量取帧与 Base64 返回 | 查看插件 |
lizhao-vpn-pro |
企业 VPN、IKEv2、安全接入与脱敏诊断 | 查看插件 |
lizhao-wechat-kit |
微信登录、分享、支付、小程序与客服 | 查看插件 |

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