HarmonyOS WPS Open SDK:打开时配置水印与修订模式

在 HarmonyOS 应用接入 @wps/wps_sdk 后,只读/可编辑往往先跑通,下一步产品会要求「预览带水印」或「以修订模式打开」。对接文档把这两类能力挂在 OpenFileRequest 上:wpsWaterMarkParamsWaterMark)与 wpsRevisionParamsRevision)。本文按调用链说明字段语义、叠加顺序与封装写法,细节以官方对接文档为准。

一、策略层在打开链路中的位置

典型时序:registerApp 成功 → 文件进沙箱 → new OpenFileRequest → 写入 enableEdit →(可选)水印 / 修订 → sendRequest

层级 能力 入口
接入 注册、可选序列号 registerApp / setWpsFileToken
打开 拉起、只读/可编辑 enableEdit
策略 水印、修订 wpsWaterMarkParams / wpsRevisionParams
结果 关窗回传 wpsTransferType

水印与修订属于策略层,不要和「能否打开」绑在同一个布尔里。联调建议:注册 → 沙箱只读 → 可编辑 → 再叠水印或修订 → 最后回传。一次写满所有开关时,ResultCode.ERROR 很难归因。

二、WaterMark 字段语义

类型:WaterMark,赋给 request.wpsWaterMarkParams

属性 说明
Enable 是否启用水印
WaterMaskText 水印文字
Angle 旋转角度
FontColor 颜色(可含透明度),如 "#19000000"
FontSize 字号

常见误判:只 new 了对象却没设 Enable = true,或文字为空却期望看见水印。封装时应显式写完再赋值给 Request。

typescript 复制代码
import { WaterMark, OpenFileRequest } from '@wps/wps_sdk';

function applyWatermark(req: OpenFileRequest, text: string): void {
  const wm = new WaterMark();
  wm.Enable = true;
  wm.WaterMaskText = text;
  wm.Angle = -30;
  wm.FontColor = '#19000000';
  wm.FontSize = 24;
  req.wpsWaterMarkParams = wm;
}

水印可与只读同时存在:预览场景不必强行 enableEdit = true

三、Revision 字段语义

类型:Revision,赋给 request.wpsRevisionParams

属性 说明
UserName 修订作者名称
EnterReviseMode 是否以修订模式打开
ShowRevisionPanel 是否显示修订面板
EnterRevisionSilent 是否静默进入(不弹提示)

修订模式通常配合可编辑使用。若 enableEdit 仍为只读,用户无法有效产生修订痕迹。EnterRevisionSilent 适合减少打扰,但仍要在联调日志里打出是否进入修订。

typescript 复制代码
import { Revision } from '@wps/wps_sdk';

function applyRevision(req: OpenFileRequest, user: string, silent: boolean): void {
  const rev = new Revision();
  rev.UserName = user;
  rev.EnterReviseMode = true;
  rev.ShowRevisionPanel = true;
  rev.EnterRevisionSilent = silent;
  req.wpsRevisionParams = rev;
}

四、注册就绪与路径前提

未注册成功就 sendRequest 会抛异常,此时讨论水印无效。把注册收成可 await 的准备;换 HAR 或换正式包包名后 clean,再验注册。路径建议先拷到沙箱:外部 URI 权限不足时常见泛化 ERROR,容易被误判成「水印没生效」。

typescript 复制代码
let ready = false;

export function prepareWps(key: string, secret: string): Promise<void> {
  return new Promise((resolve, reject) => {
    if (ready) {
      resolve();
      return;
    }
    WPSApi.registerApp(key, secret, {
      onCallback: (result: Result): void => {
        if (result.code !== ResultCode.OK) {
          reject(new Error(`register ${result.code}`));
          return;
        }
        ready = true;
        resolve();
      },
    });
  });
}

需要激活序列号时,在注册成功回调里按凭据约定一次性设置,不要在每次 Request 上重复塞 Token。

五、可复用打开封装

把模式、水印、修订做成可选参数,页面不直接 new OpenFileRequest

typescript 复制代码
export type OpenMode = 'preview' | 'edit';

export interface OpenPolicy {
  watermarkText?: string;
  revisionUser?: string;
  revisionSilent?: boolean;
}

export async function openDoc(
  ctx: UIAbilityContext,
  src: string,
  mode: OpenMode,
  policy: OpenPolicy = {}
): Promise<Result> {
  await prepareWps(APP_KEY, APP_SECRET);
  const path = copyToSandbox(ctx, src);
  const req = new OpenFileRequest(ctx, path);
  req.enableEdit = mode === 'edit';
  if (policy.watermarkText) {
    applyWatermark(req, policy.watermarkText);
  }
  if (policy.revisionUser) {
    applyRevision(req, policy.revisionUser, !!policy.revisionSilent);
  }
  return WPSApi.sendRequest(req);
}

产品临时加「预览也要水印」,只扩 policy,不新开平行 Helper。关窗回传仍用独立字段,与水印/修订解耦。

六、联调表与日志

现象 优先查
抛异常 是否等注册完成
1013 凭据 / 正式包包名 / clean
无水印 Enable、文字、是否赋给 Request
无修订 EnterReviseMode、是否可编辑
泛化 ERROR 路径是否沙箱

日志固定:code / msg / ready / 沙箱 / enableEdit / 是否带水印 / 是否进修订。全仓 new OpenFileRequest 命中保持一处。

七、小结与工程落地建议

HarmonyOS 上 WPS Open SDK 的水印与修订,是打开策略层能力:在 enableEdit 跑绿后再叠 WaterMark / Revision。字段必须显式赋值;封装用可选策略对象收口。路径进沙箱、注册先就绪、回传另算一层。字段语义以官方对接文档为准。

接入评审建议逐项确认:当前 HAR 批次与包名是否匹配、沙箱目录约定是否统一、策略是否全部走 Facade、正式包与调试包的凭据是否分开归档。缺一环容易出现「本地绿、上架红」。把「先模式后策略」写进联调清单后,联调会从猜原因变成对表排查。换 HAR 后务必 clean 再装;Release 包不要打印完整 secret;需要序列号时按凭据约定在注册成功回调里一次性设置,避免在每次 Request 上重复塞 Token。

真机验收可拆成两条固定用例:其一「只读预览 + 水印」,其二「可编辑 + 修订(含静默开关各测一次)」。两条都绿后,再决定是否叠加关窗回传。若产品临时要求「预览也要水印」,只扩 Facade 的可选参数,不要新开平行 Helper。全仓检索 new OpenFileRequest 的命中数应保持为一;页面层只调用 openDoc。注释写清「本项目约定:水印与修订只走 Facade」,比口头说「参考 Demo」更耐看。周五用正式包包名再验注册,并对照日志里的 ready、沙箱、enableEdit、是否带水印、是否进修订,确认策略相关误报是否下降------这比写长周报更能反映对接质量。

从协作角度看,把水印文字与修订作者名做成可配置项(远程配置或本地常量均可),比写死在页面里更利于运营调整。颜色与角度属于视觉参数,联调阶段可先用对比明显的组合确认逻辑,再交给设计调淡。修订面板是否展示、是否静默进入,应在需求文档里写清默认值,避免不同页面各自猜。路径拷贝失败时要有明确错误提示,否则用户只会说「打不开」或「没有水印」,研发侧难以及时定位。把上述约定坚持几周,策略层相关的反复提问通常会明显减少,接入节奏也会更稳。


基于 WPS Open SDK 鸿蒙版对接实践整理,仅供开发者参考。

官方对接文档:https://365.kdocs.cn/l/clQl5cek2NoT

相关推荐
HarmonyOS_SDK4 小时前
差异化推送消息能力,助力腕上支付业务闭环
harmonyos
小雨青年7 小时前
【HarmonyOS 7 沉浸光感深度实战】 03 五档 ImmersiveStyle 到底怎么选
华为·harmonyos
云端漫步19879 小时前
HarmonyOS NEXT AI 智能生活助手:性能优化
华为·性能优化·生活·harmonyos
云端漫步19879 小时前
HarmonyOS NEXT AI 智能生活助手:统一 AIService 封装
人工智能·华为·生活·harmonyos
灵析表格11 小时前
json_ObjectToKV 函数深度研究报告
json·excel·wps·灵析表格·excel公式盒子
云端漫步198712 小时前
HarmonyOS NEXT AI 智能生活助手:设置中心开发
人工智能·华为·生活·harmonyos
wtsolutions12 小时前
JSON 怎么导入 WPS?怎么转换成 WPS 表格?WPS 怎么打开 JSON?完整教程
json·wps
用户09340777351412 小时前
HarmonyOS WPS Open SDK 实践:关文档后怎么把结果拿回本应用
harmonyos
less_1213813 小时前
HarmonyOS WPS Open SDK:用 extraOptions 管住分享打印与导出
深度学习·harmonyos·wps