更新记录

1.0.0(2026-11-07)

  • 新增 iOS 的 Swift / UTS 五 API 适配及同源 LibreOfficeKit 移植代码;Apple 内核制品、严格离线保护与真机转换尚未完成,当前不可用,不代表已经支持 iOS 转换。
  • 新增:首版提供 Android ARM64 本地 DOC、DOCX、PPT、PPTX 转 PDF,文档不上传,不使用云端转换或联网回退。
  • 新增:提供系统文件选择、转换、取消、能力查询、诊断查询及 Android 原生连续预览六个公开 API,包含真实阶段、成功 / 失败 / 完成回调及 18 类可识别错误。
  • 新增:支持文件大小限制和总超时,默认输入上限 50 MiB、总超时 120 秒;单活动任务,忙碌、取消、超时与原生资源释放状态明确区分。
  • 新增:转换结果经 PDF 校验后保存到应用私有持久目录,返回路径、页数、字节数和耗时;保护输入原件及已交付结果,临时清理限制在本次任务范围。
  • 新增:提供 uni-app(Vue 2 / Vue 3 通用选项式 API)与 uni-app x 示例,包含完整脱敏诊断报告、一键复制、固定快照分段复制及复制失败回退。
  • 新增:Android 同源原生 PDF 连续阅读器及 openOfficePdfPreview,提供连续滚动、页码跳转、缩放、横向查看、轻触工具栏、真实打开回执和独立有界诊断;其他平台明确返回不支持,关闭不删除结果。
  • 新增:双宿主示例按体验 APK 统一文件/状态/结果卡片,提供选择并转换、真实内置 Word 样本、再次转换、错误详情与排版提示;保留完整日志复制与手动回退。
  • 修复:兼容部分工具导出的 DOCX 空根目录占位;普通网页点击超链接在私有副本中移除并返回数量警告,保留原件、可见文字及内部链接,继续拒绝外部资源和危险输入。
  • 修复:部分 DOCX 简单固定布局表格中的嵌入式图片超宽时发生缺图,私有副本按单元格可用宽度等比适配;仅同时命中的纯图片段落将过大的自动行距调整为单倍,并分别返回真实处理数量警告。
  • 修复:部分 DOCX 的 90° / 270° 旋转图片带有冗余效果占位时,清除可确认的无效占位,保留图片字节、尺寸和旋转。结果提示可能出现分页差异,复杂或未知布局不自动调整。
  • 修复:内核诊断较长时,错误回执可能截掉关键门禁信息;单独保留当前任务的脱敏检查摘要并优先纳入错误回执,方便定位系统差异。此项不改变内核门禁,也不代表 Android 16 客户故障已经修复。
  • 修复:Web 示例与诊断报告捕获异常时的类型告警,保留字符串、普通对象及标准异常的真实消息与脱敏;异常消息读取失败不再中断诊断,uni-app 示例由同源生成器同步维护。
  • 修复:传统 uni-app Web 编译时无法处理原生回调装饰器的问题;仅 App 分支保留 keepAlive,持续进度与 success/fail/complete 合同不变。
  • 优化:示例增加转换加载状态、真实阶段和可用取消入口;成功后可点击预览 PDF,预览有独立加载、失败重试及迟到回执隔离。
  • 优化:内核门禁失败报告补充脱敏 errno、检查操作和数量,保留严格拒绝,不进行盲目重试。
  • 优化:针对系统拒绝读取既有 socket 类型的兼容问题,增加受限的全线程 I/O 封锁与安装后复查;无法完整封锁、身份变化、已确认网络 socket 和其他检查失败仍拒绝转换。补充封锁数量、安装/复查、返回码及 errno 诊断。客户原机效果需使用匹配新内核的 APK 复验,不能用其他设备结果代替。
  • 优化:Android 主体库无损 XZ 压缩,保留四格式及资源;内核 AAR 为 55,717,586 字节,首次使用在私有目录展开并核验,后续复用缓存,运行时不下载 SDK。
  • 优化:新任务开始或失败保留上次成功 PDF,并明确预览标识;一键复制采集最新全量报告,备用分段仍使用同一固定快照。
  • 调整:Android 内核改用公开 Maven 固定依赖,不随插件主体附带大型 SDK;HBuilderX 原生构建自动下载,无需客户手工补 AAR。接入文档说明真实仓库、身份、试用 / 普通授权、自定义基座与云打包计量边界。
  • 调整:明确 Android API 24+、arm64-v8a 与 64 位进程要求。iOS 为不可用的移植源码;Harmony、Web 和小程序暂不支持;Vue 2、nvue、标准 VDOM、最低系统及 16KB 设备按专项验收结论确认。

平台兼容性

uni-app(5.26)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ × × - - √ √ ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × - - - - - - - - - -

uni-app x(5.26)

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

lizhao-office-pdf

演示应用 适用平台 下载体验
Office 转 PDF Android 下载演示 APK

介绍

lizhao-office-pdf 为 uni-app / uni-app x 提供 Android ARM64 本地 Office 转 PDF 能力,将 DOC、DOCX、PPT、PPTX 转为可独立打开的静态 PDF,适用于离线归档、阅读与业务交付。文档在设备本地处理,不上传、不使用云端转换或联网回退。

导入完整插件后,HBuilderX 原生构建通过已配置的公开 Maven 仓库自动取得 Android 内核,客户无需手动下载或拷贝 AAR。下载发生在构建阶段,安装后的转换和 PDF 连续阅读均在本机完成。本目录仍为待发布材料,公开仓储解析通过不代表市场授权、全部宿主及商业发行材料已经验收。

功能特色

特色功能 能解决什么问题 相关 API / 配置
本地四格式转换 无网络也可将 Word、PowerPoint 文件转换为 PDF,无需安装 Office 应用 convertOfficeToPdf,DOC / DOCX / PPT / PPTX
系统选择文件 从系统文件选择器导入一份文档,不申请广域存储权限 chooseOfficePdfFile
真实进度与结果 获得真实阶段、任务编号、PDF 路径、页数、大小和耗时 onProgress、success、fail、complete
取消与总超时 区分取消请求、原生退出与资源释放,避免晚到结果误报成功 cancelOfficePdfTask、timeoutMs
原件与结果保护 校验 PDF 后原子保存,后续任务清理不覆盖原件或删除已交付 PDF OfficePdfResult.outputPath
DOCX 图片适配 对明确的超宽图片和冗余效果占位进行兼容处理,结果返回实际处理警告 convertOfficeToPdf、OfficePdfResult.warnings
内置连续阅读 Android 直接打开转换结果,连续滚动、页码跳转、缩放和横向查看,无需另装 PDF 阅读器 openOfficePdfPreview
能力与故障诊断 查询 ABI、引擎状态,汇总环境、原生错误与脱敏操作轨迹 getOfficePdfCapabilitiesSync、getOfficePdfDiagnosticsSync
双宿主示例 使用真实 API 体验转换、取消及完整日志 / 分段复制 uni-app 与 uni-app x 示例页面
仓储自动依赖 插件主体不携带大型 SDK,原生构建自动取得固定内核;运行时不下载 SDK uni_modules/lizhao-office-pdf/utssdk/app-android/config.json

适合哪些场景

场景 推荐能力 使用边界
离线归档、现场作业 系统选择文件后调用 convertOfficeToPdf 文件必须已经下载到本地并可读取
合同、报告等私密文档处理 本地转换、应用沙盒保存结果 不上传文档,业务仍需管理输出文件的保存和分享
已有本地文件的业务流程 传入 local-file 或合法 content-uri 读取授权、文件真实格式及大小必须有效
转换前确认设备条件 getOfficePdfCapabilitiesSync 需要 Android API 24+、ARM64 进程和匹配内核
客户问题排查 示例底部一键复制完整诊断报告 先复现再复制;报告不默认上传

不适用于要求轻量包体、ARM32/x86、所有文档与Microsoft Office逐像素一致、文档编辑、宏执行、PPT动画/视频保留、无限后台转换或PDF转Office的业务。扫描图片中文字不包含OCR。

下载与导入

第一步:导入插件主体

插件上架后,在插件市场选择试用或购买,再使用 HBuilderX 导入到自己的 uni-app 或 uni-app x 项目;源码接入则复制完整 uni_modules/lizhao-office-pdf/ 目录。当前待发布,不提供尚未确认的市场详情页链接。

保留插件 ID、目录名、入口、示例、原生配置、内核身份文件及 uni_modules/lizhao-office-pdf/licenses/ 中的许可材料。普通授权、试用和源码接入均使用插件自带的仓储配置,不需要修改加密源码或手工补 SDK。

第二步:保留 Android 自动依赖配置

uni_modules/lizhao-office-pdf/utssdk/app-android/config.json 已声明固定 Maven 坐标及公开 HTTPS 仓库。HBuilderX / 云打包在原生构建阶段解析依赖,读取仓库无需账号、密码或 Token;运行时不访问仓库。客户只需导入完整目录并进行原生打包。

项目 要求
仓库 https://env-00jxu7ha8amh.normal.cloudstatic.cn/lizhao-office-pdf/maven/;下载固定内核 AAR;使用配置文件中的完整地址,不把单个 AAR 下载链接填入 dependencies
依赖 com.lizhao:office-pdf-kernel;固定版本见 uni_modules/lizhao-office-pdf/utssdk/app-android/config.json,禁止改成动态版本
内核大小 55,717,586 字节,约 55.72 MB / 53.14 MiB
SHA-256 ca66e46ec4e18a503f31827c8f413edb5b65544a5d8655b81fa699867b8093a0
适用平台 Android API 24+,arm64-v8a,64 位应用进程
身份依据 uni_modules/lizhao-office-pdf/utssdk/app-android/libs/office-pdf-kernel.json,包含仓库、坐标、AAR 与压缩载荷 SHA-256

仓库已完成全新 Gradle 缓存的实际公网解析与完整 AAR SHA-256 核对。项目首次构建需要访问仓库;网络不可达时显示构建错误,不会在手机中静默补下载,也不会切换云端文档转换。

升级旧版手工依赖的工程时,先备份自己原有文件,再检查插件 libs 中是否残留旧 AAR;同一 SDK 不应同时通过本地文件和 Maven 重复引入。不要把大型 SDK 放进 static、项目资源或插件发布目录,不修改原生库来消除重复类/重复 SO 错误。

第三步:选择宿主并导入 API

页面只从插件根导入:

import {
  chooseOfficePdfFile, convertOfficeToPdf, cancelOfficePdfTask,
  getOfficePdfCapabilitiesSync, getOfficePdfDiagnosticsSync, openOfficePdfPreview,
  OfficePdfOptions, ChooseOfficePdfFileOptions, OpenOfficePdfPreviewOptions
} from '@/uni_modules/lizhao-office-pdf'

选择宿主对应的完整示例页面,并在自己项目的 pages.json 注册:

  • uni-app x:uni_modules/lizhao-office-pdf/example/uniappx/index.uvue。
  • uni-app(Vue 2 / Vue 3 选项式 API):uni_modules/lizhao-office-pdf/example/uniapp/index.vue,无需额外组合式依赖;页面脚本兼容不等于各宿主原生和真机验收均已完成。
  • 示例使用说明:uni_modules/lizhao-office-pdf/example/readme.md。界面沿用体验 APK 的文件、状态与结果卡片;“选择并转换”自动转换选中文档,“Word 示例”使用随插件交付的真实样本。成功后在 Android 内置连续阅读器打开 outputPath;新任务失败仍可预览上次成功 PDF。底部保留完整日志、分段及复制失败回退。

第四步:制作自定义基座或打包应用

  1. 确认开发环境为 HBuilderX 5.26+,目标 Android 为 API 24+,应用架构选择 ARM64 / arm64-v8a。当前内核不包含 ARM32 或 x86 版本。
  2. 保留自动依赖配置,提交包含本插件的 Android 原生打包;SDK 由构建服务下载。调试使用匹配源码的自定义基座;普通标准基座不能运行该内核。
  3. 试用用户:从插件市场申请试用后,按平台规则云打包自定义基座进行测试,不能将试用插件用于正式发行。
  4. 普通授权用户:保留市场加密代码,使用已购买授权绑定的 AppID / 包名,按平台规则提交云打包。公开 SDK 依赖不代替购买或授权验证。DCloud 付费插件说明
  5. 安装新的自定义基座后,再运行对应示例。首次能力为 pending 时,可发起转换完成后台校验;不是只有显示 ready 才能首次使用。缺失、错误架构或不匹配的内核应先修正,不能把页面可打开当作内核可用。
  6. 内核、仓储依赖或新增原生阅读器变化时,重新联编 / 打自定义基座;更新后核对原生身份与页面资源。WGT 不能把 SDK 或原生阅读器更新到旧基座。

仓储配置遵循 UTS 的 Android config.json 接入规则。本插件的实际市场试用、普通授权云打包仍需分别验收,公网 Gradle 解析不能替代市场流程。

仓储依赖减少随工程提交的大文件,但不保证任意客户工程免费云打包。 官方计量还涉及项目编译后、压缩前的完整材料及最终安装包,其他代码、插件、图标和资源都会占用额度。当前压缩内核约 55.72 MB;本插件独立体验 APK 小于 60 MB,均不能代替完整客户工程计量。DCloud 云打包规则

不要同时加入旧 Office 预览插件的可选离线内核;发现重复类或原生库时,先核实依赖来源,不通过盲目 pickFirst 掩盖冲突。

接入常见问题

现象 先检查什么 处理方法
构建提示无法解析内核依赖 是否保留完整 config.json;构建服务能否访问公开仓库 按第二步核对配置和原始解析错误,不把 AAR URL 填入 dependencies
同名内核哈希不符 插件与依赖是否来自不同交付批次、缓存是否异常 按随插件的内核身份核对固定坐标、字节数和 SHA-256,不能改名掩盖
已打包,手机仍报 ENGINE_UNAVAILABLE 手机是否仍运行旧标准 / 自定义基座,ABI 是否为 ARM64 安装匹配新依赖的自定义基座,复制完整报告核对真实原生身份
Android 预览未打开 filePath 是否直接来自转换成功结果,是否重新原生联编 仅传插件交付的私有 PDF,保留失败详情;预览失败不删除结果
重复类、重复 SO、C++ 冲突 是否同时装入另一 Office 内核或其他 SDK 的运行库 核对依赖来源及本说明“已验证范围与 C++ 依赖”,不要删除任意原生库绕过

从基础到进阶:按业务模块使用

模块一:选择本地文件并转换

最小路径为“系统选择 → 将成功返回的本地副本传入转换 → 在success中使用PDF”。来源须为真实本地文件;网络URL会被拒绝。默认输入上限50MiB,总超时120000毫秒,包括准备、引擎校验、转换、PDF校验与结果提交。

uni-app x:使用 UTS 类型

在已注册页面的按钮事件或业务方法中执行下方代码;真实完整页面为 uni_modules/lizhao-office-pdf/example/uniappx/index.uvue。上方的根导入提供所需 API 和类型。

const chooseOptions: ChooseOfficePdfFileOptions = {
  success: (selected) => {
    const options: OfficePdfOptions = {
      source: { kind: 'local-file', uri: selected.localPath },
      format: selected.format,
      timeoutMs: 120000,
      success: (result) => {
        console.log('PDF已生成', result.outputPath, result.pageCount, result.fileSize)
        openOfficePdfPreview({
          filePath: result.outputPath,
          fail: (error) => { console.error('打开失败,PDF仍已生成', error.errMsg) }
        })
      },
      fail: (error) => {
        console.error('转换未成功', error.errSubject, error.errCode, error.reason, error.nativeCode)
      },
      complete: (result) => { console.log('本次转换回调结束', result.taskId, result.success) }
    }
    const taskId = convertOfficeToPdf(options)
    console.log('转换任务编号', taskId)
  },
  fail: (error) => { console.error('选文件未成功', error.errCode, error.reason) }
}
chooseOfficePdfFile(chooseOptions)

完整页面内会脱敏后记录诊断,不建议在客户生产日志中直接打印未脱敏路径。输入原件不被修改,选文件返回的沙盒副本及成功PDF由业务按实际生命周期管理。卸载应用会删除应用沙盒。

uni-app(Vue 3):使用 JavaScript 调用

已注册 .vue 页面的脚本中只导入业务 API,不使用 UTS 类型注解;按钮调用 chooseAndConvert()。下方函数可放在 <script setup> 中,带忙碌状态、取消和日志的完整页面为 uni_modules/lizhao-office-pdf/example/uniapp/index.vue。

import { chooseOfficePdfFile, convertOfficeToPdf, openOfficePdfPreview } from '@/uni_modules/lizhao-office-pdf'

function chooseAndConvert() {
  chooseOfficePdfFile({
    success: (selected) => {
      convertOfficeToPdf({
        source: { kind: 'local-file', uri: selected.localPath },
        format: selected.format,
        timeoutMs: 120000,
        success: (result) => {
          openOfficePdfPreview({
            filePath: result.outputPath,
            fail: (error) => {
              console.error('打开失败,已生成的 PDF 仍然保留', error.errMsg)
            }
          })
        },
        fail: (error) => {
          console.error('转换失败', error.errSubject, error.errCode, error.reason, error.nativeCode)
        },
        complete: (result) => { console.log('转换结束', result.taskId, result.success) }
      })
    },
    fail: (error) => { console.error('选择失败或取消', error.errCode, error.reason) }
  })
}

模块二:查询能力、取消及诊断

const capabilities = getOfficePdfCapabilitiesSync()
console.log('内核状态', capabilities.status, capabilities.abi, capabilities.nativeCode)
// pending表示尚待后台/首次转换校验,可以调用转换;unavailable须按nativeCode处理。

// 保存convertOfficeToPdf实际返回的编号,不使用示意编号取消其他任务。
function requestCancel(taskId: string): void {
  const receipt = cancelOfficePdfTask(taskId)
  console.log('取消请求回执', receipt.accepted, receipt.state, receipt.executionState)
  // accepted不等于资源已经退出,仍等待原转换的fail/complete。
}

const diagnostics = getOfficePdfDiagnosticsSync()
console.log('脱敏诊断', diagnostics.stage, diagnostics.executionState, diagnostics.droppedLogs)

取消在结果提交前被接受,立即禁止该任务再发布成功;真实退出在deadline前完成则为CANCELLED,deadline先到则为TIMEOUT并记录cancelRequested和draining。晚结束仅清理,不二次回调。已交付结果后取消不被接受,也不删除结果。

没有活动转换时无需调用取消。页面销毁时可请求取消本页保存的任务编号,仍需尊重原生释放状态。首期仅一个活动转换任务,无隐藏等待队列;第二个任务返回BUSY,不中断第一个任务。

模块三:Android 连续预览与内置样本

转换成功后的 outputPath 可传给 openOfficePdfPreview。阅读器与体验 APK 使用同源的 Android PdfRenderer 连续列表,支持滑动翻页、页码跳转、缩放后的横向查看和轻触显示工具栏。关闭阅读器保留 PDF;无需外部阅读应用,不为预览申请存储权限。

function previewConvertedPdf(outputPath: string): void {
  const options: OpenOfficePdfPreviewOptions = {
    filePath: outputPath,
    success: (result) => { console.log('阅读器已初始化', result.taskId, result.pageCount, result.fileSize) },
    fail: (error) => { console.error('预览失败,PDF仍保留', error.errCode, error.nativeCode, error.errMsg) },
    complete: (result) => { console.log('打开预览回调结束', result.taskId, result.success) }
  }
  openOfficePdfPreview(options)
}

success 表示文件已被真实解析且阅读器可以显示,并不表示所有页面已逐页渲染或排版验收。初始化时退出会返回真实取消;打开成功后关闭不会再次触发终态回调。仅接受插件结果目录中的已生成 PDF,不用于任意外部文件。iOS、Harmony、Web 和小程序调用此原生预览 API 返回 9347002 / UNSUPPORTED_PLATFORM。

两宿主示例的“Word 示例”使用随插件交付的 uni_modules/lizhao-office-pdf/static/reference-docx.docx,真实传入 source.kind='app-resource' 和资源路径 /uni_modules/lizhao-office-pdf/static/reference-docx.docx;文件大小由生成器读取实际字节,不用预置 PDF 冒充转换。实际 API 调用及失败处理见上述两份完整示例页面。

API 用途速查

API 用途 返回
chooseOfficePdfFile(options) 系统选择并流式复制一份Office文件到沙盒 选取任务ID,终态回调
convertOfficeToPdf(options) 本地Office转PDF 转换任务ID,进度和终态回调
openOfficePdfPreview(options) Android 内置连续阅读器打开已生成 PDF 预览任务ID,打开成功/失败及complete
cancelOfficePdfTask(taskId) 请求取消指定任务 accepted、state、executionState
getOfficePdfCapabilitiesSync() 轻量能力与实际可用性查询 OfficePdfCapabilities
getOfficePdfDiagnosticsSync() 脱敏、有界的原生诊断快照 OfficePdfDiagnostics

转换参数

参数 类型 必填 说明 默认值 可选参数
source OfficePdfSource 是 本地输入对象,包含kind与uri 无 local-file、content-uri、app-resource
source.kind string 是 来源类型,content-uri须有有效系统授权;app-resource须为宿主可读取的本地资源路径 无 local-file、content-uri、app-resource
source.uri string 是 本地路径或真实授权content URI,不接受http/https 无 最长4096字符,不含NUL
format string 否 格式提示,原生仍核对文件头/容器/实际类型 自动识别 doc、docx、ppt、pptx
timeoutMs number 否 包含准备至提交的总deadline,单位毫秒 120000 1000–600000的整数
maxInputBytes number 否 输入字节上限,只能在硬边界内设置 52428800 1–134217728的整数
onProgress function 否 真实taskId、stage、elapsedMs,无假百分比 无 preparing/converting/validating/saving等真实阶段
success function 否 结果完整校验并持久保存后一次回调 无 OfficePdfResult
fail function 否 可识别错误,保留原生释放状态 无 OfficePdfFail
complete function 否 终态后至多一次,与success/fail使用同一结果引用 无 OfficePdfComplete

选择、取消和查询

参数 类型 必填 说明 默认值 可选参数
choose.success function 否 返回taskId、localPath、fileName、format、fileSize(字节) 无 OfficePdfPickedFile
choose.fail function 否 取消选择、忙碌、不可读、过限等真实错误 无 OfficePdfFail
choose.complete function 否 返回taskId、success、result或error 无 ChooseOfficePdfFileComplete
cancel.taskId string 是 原转换返回的任务ID 无 不接受任意目录/文件路径

同步查询没有参数,不读取大文件或同步初始化重型引擎。能力状态区分pending、ready、unavailable;包含formats、ABI、引擎版本/构建ID、实际限额、supportsHardCancel及限制说明。installed不能当作转换成功。

原生预览参数与结果

参数 类型 必填 说明 默认值 可选参数
filePath string 是 直接使用转换成功的 outputPath;只读打开应用私有结果 PDF,不接受网络地址或其他目录 无 非空、最长4096字符、无控制字符
success function 否 返回 OfficePdfPreviewResult:taskId、fileSize(字节)、pageCount;阅读器已初始化且可显示 无 打开成功至多一次
fail function 否 OfficePdfFail,包含 previewing 阶段、原生原因和脱敏诊断 无 不可读、无效PDF、忙碌、取消、打开超时、不支持平台等
complete function 否 OfficePdfPreviewComplete:taskId、success、result、error;失败时 result=null,成功时 error=null 无 与对应 success/fail 共用本次终态

预览有独立的活动阅读器限制和打开超时;并发再开返回 9347010 / BUSY,初始化等待超过期限返回 9347012 / TIMEOUT。页渲染使用单后台队列及有界缓存,关闭时串行释放;关闭已打开阅读器不取消转换或删除结果。预览诊断合入 getOfficePdfDiagnosticsSync().records,自身日志丢弃量在预览摘要中单独说明,不覆盖转换快照的状态及计数。

结果、进度与错误对象

成功对象字段:taskId、outputPath(沙盒绝对路径)、fileSize(字节)、pageCount、durationMs、sourceFormat、engine、engineVersion、warnings。结果位于应用私有持久目录中的每任务独立PDF,不覆盖原件;打开失败不改变转换已成功的结果。对外分享需业务使用正式系统分享能力和临时授权,不能把私有绝对路径或file URI直接交其他应用。

OfficePdfComplete字段为taskId、success、result、error;失败时result为null,成功时error为null。OfficePdfFail包含errSubject、errCode、errMsg、reason、taskId、stage、nativeCode、cancelRequested、executionState与脱敏diagnostics。原生执行状态可为running、draining、released、unknown;终态回调不自动表示资源已释放。

进度通过本任务onProgress订阅,不建立全局持续监听;任务终态或释放后不再发送本任务进度。诊断缓存有条数与体积上限,droppedLogs标明丢弃,报告不默认上传。

错误码说明

统一 errSubject=lizhao-office-pdf。以下错误码与reason跨宿主一致,原生原因保留在nativeCode与脱敏diagnostics中。

错误码 reason 含义与处理建议
9347001 INVALID_ARGUMENT 参数或数据源不合法,核对本地URI及整数限额
9347002 UNSUPPORTED_PLATFORM 当前 Harmony / Web / 小程序等端不支持;原生连续预览仅 Android。iOS 转换缺少可用内核时返回 9347008
9347003 UNSUPPORTED_FORMAT 首期仅四种Office格式,不改后缀伪装
9347004 SOURCE_UNREADABLE 文件/授权不可读,重新选择或准备合法沙盒文件
9347005 TYPE_MISMATCH 提示格式、后缀和内容不一致,提供真实文档
9347006 PASSWORD_REQUIRED 首期不处理密码文档,请业务先合法解密
9347007 CORRUPT_DOCUMENT 文档或容器损坏,先由原办公软件检查
9347008 ENGINE_UNAVAILABLE 检查AAR、ABI、策略门禁及基座是否匹配
9347009 LIMIT_EXCEEDED 文件/容器/输出超过安全预算,缩小文档
9347010 BUSY 已有任务未释放,等待真实退出后再试
9347011 CANCELLED 取消后任务已停止,无新可交付结果
9347012 TIMEOUT 总deadline已到,核对executionState,不假定资源已退出
9347013 OUTPUT_INVALID PDF未通过真实校验,不把部分文件当成功
9347014 NO_SPACE 磁盘预算不足,业务释放自身不再需要的资源后重试
9347015 RESOURCE_RELEASE_UNCONFIRMED 资源退出未知,保留槽并查看完整报告,不立即重复转换
9347016 NATIVE_FAILURE 未分类原生失败,复制完整脱敏报告排查
9347017 EXTERNAL_CONTENT 已拒绝外部资源或不允许的外部关系;普通网页点击链接的处理见注意事项,不联网补齐文档
9347018 LICENSE_INVALID 选定引擎授权无效,按真实引擎和分发范围处理

失败不会静默切换到服务器。取消接受与完成不是同一时刻;释放状态未知时不能承诺文件已清理,超时后也不会再派发成功。客户回调抛异常不改变已固定的业务终态,complete仍按单次合同派发。

当 nativeCode=FD_INSPECTION_INCOMPLETE 时,表示内核未完成自身文件描述符的安全检查,不能仅凭此错误判断缺少外部存储权限。系统文件选择器通过用户选中文件授予读取权限,无需申请全盘存储读写权限。排查时请从示例底部“一键复制日志”取得完整报告,并提供设备型号和 Android 版本;错误回执优先保留当前任务的门禁检查摘要,完整快照仍可通过 getOfficePdfDiagnosticsSync 获取。具体失败操作、errno 和线程检查信息用于区分系统限制、检查竞态等原因,不应关闭门禁或盲目重试。

部分系统允许识别进程中的 socket,却拒绝读取其类型。内核只在符合该特定拒绝条件时尝试封锁这些 socket 的后续 I/O,并在所有线程上再次核验;封锁或复查失败仍返回真实错误,不把未知 socket 当成本地 socket。诊断中的 quarantine.installed、quarantine.rechecked、quarantine.tsyncRc、quarantine.errno 用于核对这一步。错误回执有长度上限,辅助计数可能只出现在完整快照中;排查时请保留完整报告,不能仅凭短摘要缺少字段判断没有执行检查。

注意事项

平台与基座

宿主 / 平台 支持情况 条件与验收边界
uni-app,Android,Vue 3 .vue 已提供实现及示例 API 24+、ARM64;保留记录有资源导出 / Kotlin 联编,完整新基座业务待验
uni-app x,Android,Vapor 已提供实现及示例 API 24+、ARM64;配对项目采用 Vapor,有资源导出 / libVapor 联编记录,完整新基座业务待验
uni-app x,Android,标准 VDOM 待独立宿主验收 已有单文件转换检查,不将其等同标准模式完整工程编译或运行通过
uni-app,Android,Vue 2 .vue 通用选项式示例已提供,原生宿主待验 与 Vue 3 共用示例,脚本/模板兼容检查不替代 Vue 2 原生联编和真机验收
uni-app .nvue 未验证 不承诺当前页面在此渲染组合已兼容
Android ARM32 / x86 / x86_64 不支持 内核仅包含 arm64-v8a,不能只改配置获得其他 ABI
Android 最低系统 / 16KB 页设备 需专项验收 minSdk 为 API 24,不表示最低系统和 16KB 设备均已实测
iOS 未提供首版支持(移植源码) 已有 Swift / UTS 接口及 LibreOfficeKit 适配源;缺少 Apple 内核制品与严格离线保护,转换返回 9347008 / ENGINE_UNAVAILABLE,不能用于生产
Harmony / HarmonyOS 不支持 尚无转换实现
Web / H5 不支持 不提供浏览器端 Office 转 PDF
微信、支付宝及其他小程序 不支持 不提供小程序转换实现
uniCloud / 其他服务器 不提供云端转换 纯客户端能力,没有云函数、云服务或联网回退

uni_modules/lizhao-office-pdf/package.json 中 y 表示提供对应实现,- 表示未验证 / 不在本插件能力范围,x 表示不支持。Android 支持声明不等于每个系统版本、渲染模式与客户文件都已经验收。Harmony / Web / 小程序等端的转换 / 选择接口通过失败回调返回 9347002 / UNSUPPORTED_PLATFORM。iOS 已增加系统文件选择及五 API 适配源码,但内核尚未交付;转换返回 9347008 / ENGINE_UNAVAILABLE,能力查询 available=false。iOS 的 - 表示未完成验证,不是支持承诺。移植边界见 uni_modules/lizhao-office-pdf/ios-port.md。

Android 内核由公开 Maven 在构建期自动取得,AAR 大小为 55,717,586 字节。主体库使用无损 XZ 压缩,保留原本的四格式能力、字体及资源;首次使用需要在应用私有目录展开约 196 MB 主体库,并进行身份检查,后续复用已校验缓存。包体缩小不表示安装展开、磁盘或内存需求同比降低;需为文档、临时文件和结果另外预留空间。当前仅 ARM64 进程,不自动降级 ARM32 / x86。静态语法或 appResource 成功不表示匹配自定义基座或手机功能已通过。

首次接入以及修改原生源码、依赖、Manifest、权限或资源后,需要重新原生联编或重打Android自定义基座;WGT只更新页面资源,不能更新已编译内核。未安装旧可选内核的Office预览插件可作为组合验证目标,两个离线内核重复装入须显式排除。

转换进程与接入边界

转换服务在本应用的 :office_pdf_kernel 私有进程中运行。宿主的 Application 初始化也可能在该进程执行;请避免在此进程自行启动无关业务、网络 SDK、额外线程任务或同名组件。若宿主 SDK 默认在每个进程初始化,应按其官方配置将该转换进程排除,并在匹配基座中验证。独立原生体验 APK 的结果不能代替这些宿主集成检查。

内核检查在转换 worker 解析文档内容之前执行;主进程已进行有界格式校验。保护依赖可信宿主与启动阶段,不是针对任意恶意宿主的完整系统沙箱,不覆盖通过 Binder / 本地 IPC 委托其他进程联网,也不会撤销检查安装之前已经提交的异步 I/O 或已有映射。被封锁的文件描述符编号会保持封锁直到该 worker 退出,即使后来被关闭或复用也不会解禁;发生运行时不兼容时应回传完整诊断,不关闭保护规则。

已验证范围与 C++ 依赖

保留的开发验收记录显示:Android 10 的 MI 8 ARM64 独立原生验收包完成四格式转换,DOC 1 页、DOCX 3 页、PPT / PPTX 各 2 页;开发样本中文、图片、表格、8 页渲染以及取消、总超时、后续转换和原件 / 已交付结果保护已有验证记录。这些是独立原生包及指定样本的历史结果,完整 uni-app / uni-app x 调用链、系统选文件授权和手机剪贴板仍需匹配新基座验收,不保证客户文档全部同样排版。

压缩内核另在 Redmi K30 Pro / Android 12 / API 31 / ARM64 的并存独立原生包完成四格式冷暖、取消/超时后自然释放、部分解压取消后的精确恢复,以及同机未压缩内核对照的 19 份 PDF 逐页像素/文字/图片/页数核对。该证据针对开发样本,不能替代最低 API 24、16KB 设备、任意客户文件或完整 UTS 宿主验收。

与使用OpenCV的图像插件组合时,需核对 libc++_shared.so。DCloud打包说明列明云端对该文件有默认pickFirst配置;打包成功不能单独证明运行库兼容。本轮使用明确只含单份运行库的两套独立组合包,分别验证四格式转换及OpenCV 4.12.0的真实矩阵、滤波和异常恢复。已验证候选为:

运行库来源 ARM64文件SHA-256
内核上游附带的C++运行库 c4c2fe5cbcb1fba0003a31fc7ab29a9bb12df6cc187ec45a806462540e83d93b
OpenCV 4.12.0附带的C++运行库 4397241b4bd20a8e579bfb41d21107857e12985f6a01ca0c2a5f83380d1270b4

维护插件源码的开发者可运行 scripts/check-office-pdf-repository.cjs 核对配置和实际 Gradle 缓存中的内核,再用 scripts/check-office-pdf-native-deps.cjs 检查真实 C++ 条目;追加实际 APK 路径可核对最终 Office 内核及 C++ 唯一条目。仓储尚未解析时检查会明确失败;非默认缓存可用 OFFICE_PDF_KERNEL_AAR 指定真实解析文件,不能把 SDK 拷回插件。普通市场接入用户无需这些工程脚本。其他 SDK、运行库版本、传递依赖和完整宿主运行需要另验,不修改上游库名、不用未经核对的 pickFirst 掩盖冲突。

文件、字体与生命周期

系统选择器仅持有本次授权,成功后将本地副本交给业务;网络、尚未本地可读的云端文件不能作为纯客户端成功证据。应用后台运行受系统限制,首期不提供保活或后台无限执行承诺。

Office字体与布局受本地引擎/字体资源影响,中文、复杂表格、图表、页眉页脚和多页分页须用业务样本逐一核对。静态PDF不保留PPT动画/音视频,图片中的文字不提供OCR。原生禁止宏、活动内容和外部资源加载。DOCX / PPTX 中符合标准的 HTTP / HTTPS 点击超链接会在转换用的私有副本中移除,并通过 warnings 返回移除数量;保留可见文字和内部链接,生成的 PDF 不保留这些外部点击链接,原文件不变。外链图片、模板、危险地址或将超链接冒充资源的文档仍明确拒绝,不下载云端资源补齐内容。损坏/加密/超限输入明确失败。

对于简单固定布局表格中超出单元格可用宽度的嵌入式(inline)图片,插件仅在转换用的私有副本内按可用宽度等比缩小;与这类适配同时命中的纯图片段落,若显式使用大于单倍的自动行距,会调整为单倍行距以减少跨页时漏绘。对于旋转 90° / 270°、未启用真实绘图效果却带有可确认冗余效果占位的图片,仅清除冗余占位,保留图片字节、尺寸和旋转设置。warnings 分别说明实际图片、段落或占位处理数量。复杂或无法确认的布局不自动调整;这些处理不修改原文件,但可能改变图片显示大小、行距和分页,不能保证 PDF 与 Word 逐像素一致或页数相同,请核对实际图片、表格和分页效果。

已返回PDF由业务按保留策略管理,插件不会因下一任务失败自动删除它;应用卸载删除沙盒。需要保存到公开位置或分享时,业务使用系统授权能力,不为转换额外申请无关权限。

隐私、诊断和验收边界

日志不记录客户文档正文、密码、Token或完整个人路径。完整报告包含真实版本/环境/任务关联号和原生快照,无法取得的HX构建版本等写unknown并注明来源;准备电脑版本不能冒充客户包的构建版本。示例底部提供一键复制、固定快照分段与复制失败的手动回退,不清空原日志。

源码静态检查、HX项目编译、原生生成物、独立APK、完整自定义基座以及真机业务验收是不同层次。当前未执行或外部条件不足的项应单独记录;没有客户样本或16KB设备不能宣称这些范围通过。

发行材料

保留 uni_modules/lizhao-office-pdf/licenses/ 中的上游来源、许可证及修改记录。uni_modules/lizhao-office-pdf/licenses/SOURCE-STATUS.json 如实记录尚未补齐的完整第三方NOTICE和客户源码获取渠道;当前源码候选可用于开发基座验收,商业发行前仍须完成这些材料及相应发布检查,不能把开发样本通过当成发行就绪。

作者系列 UTS 插件

以下为作者已发布的 UTS 插件,可按能力方向查找。

插件 能力方向 插件市场
lizhao-alipay-kit 支付宝授权登录、App 支付与脱敏诊断 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-apple-iap 苹果内购、交易恢复、订阅管理与服务端验签参考 查看插件
lizhao-apple-login 苹果授权登录、凭证状态与撤销监听 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-camera-pro 原生相机、拍照录像、水印与媒体保存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-dingtalk 钉钉授权登录、内容分享与回执诊断 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-douyin-kit 抖音授权登录、内容分享与回执诊断 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-google-login Google 授权登录、会话管理与脱敏诊断 查看插件
lizhao-hce-card NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 查看插件
lizhao-health 健康数据授权、查询、统计与写入 查看插件
lizhao-http-server 本地 HTTP 服务、文件传输与实时通信 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-id-photo 证件照制作、尺寸换算、换底色与模板换装 查看插件
lizhao-img-eraser 图片去水印、局部修复与原生编辑器 查看插件
lizhao-live-activity 实时活动、系统胶囊与普通通知降级 查看插件
lizhao-live-photo 实况照片选取、展示预览与原件处理 查看插件
lizhao-map 高德地图、定位、地点搜索、路线规划与导航 查看插件
lizhao-meta Facebook 登录分享、应用事件与深链 查看插件
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-notify-pro 本地通知、点击动作、进度与定时提醒 查看插件
lizhao-novel-reader 原生小说阅读、仿真翻页与段落评论 查看插件
lizhao-office-view Office 与 PDF 文件预览、进度与缓存管理 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-play-billing Google Play 商品购买、订阅、恢复与确认消耗 查看插件
lizhao-qq-share QQ 授权码登录、QQ 与 QQ 空间分享 查看插件
lizhao-qrcode 二维码生成、Logo 与样式配置、批量生成及导出 查看插件
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-player 原生视频播放器、清晰度与播放交互 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件
lizhao-wecom 企业微信授权登录、内容分享与脱敏诊断 查看插件
lizhao-xhs-share 小红书图文视频分享与回执诊断 查看插件

隐私、权限声明

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

Android使用系统文件选择器单次读取授权,不申请广域存储、网络或其他敏感权限。 iOS 移植源码使用系统文档选择器单次授权,不申请照片或广域文件权限;转换内核尚未就绪。

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

用户主动选择的本地办公文件在应用沙盒内转换;不上传文档或日志,日志脱敏后由用户主动复制。

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

无

暂无用户评论。