1. 背景

在企业安全的功能场景中,全屏水印是一种有效的防护手段,通常用于保护敏感数据、防范信息泄露,增强文档和图文内容的可追溯性。它通过在屏幕或文档上覆盖可见的水印,起到防篡改、标识来源以及防止非法复制等作用。

视频会议与屏幕共享:例如,在员工或客户的远程会议中,为了防止敏感信息泄露或非法录制,屏幕上可以加上动态或静态水印。

敏感文档:在合同、财务报表等文件上添加全屏水印,确保文件内容只有授权人员可以查看,并且能够追溯文件的流转路径。

监控与审计:在安全监控场景中,水印可以用来标识监控视频内容的来源,确保视频流的安全性和合法性。

2. 功能实现

该方案依赖MDM Kit中的接口实现,性能较好,适合对安全要求较高的场景。调用MDM Kit相关接口,需要应用具备企业MDM应用发布证书,具体申请流程可参考:申请资质

2.1 接口定义

可以通过securityManager.setWatermarkImage设置水印策略。

2.2 关键代码实现

2.2.1 字符串编辑svg水印文件信息,并保存至沙箱路径

generateSVG(title: string, subTitle: string) {
       const xmlString = `<?xml version="1.0" encoding="UTF-8"?>
   <svg xmlns="http://www.w3.org/2000/svg" width="300" height="200" viewBox="0 0 300 200">
     <!-- 水印文字(倾斜+半透明) -->
     <text x="150" y="100" font-family="Arial" font-size="24" fill="#808080" opacity="0.3" text-anchor="middle" transform="rotate(-15, 150, 100)">
       ${title}
     </text>
     <!-- 可选:添加第二层小字 -->
     <text x="150" y="130" font-family="Arial" font-size="12" fill="#808080" opacity="0.2" text-anchor="middle" transform="rotate(-15, 150, 130)">
       ${subTitle}
     </text>
   </svg>`;
       let svgPath: string = this.getUIContext()?.getHostContext()?.getApplicationContext().filesDir + '/waterMask.svg';
       let file = fs.openSync(svgPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
       let writeLen = fs.writeSync(file.fd, xmlString);
       console.info("write data to file succeed and size is:" + writeLen);
       fs.closeSync(file);
     }

2.2.2 调用接口securityManager.setWatermarkImage,并传入第一步中的svg图片

setWaterMask(bundleName: string) {
     let wantTemp: Want = {
       bundleName: 'com.demo.myapplication',
       abilityName: 'EnterpriseAdminAbility',
     };
     let accountId: number = 100;
     try {
       let svgPath: string = this.getUIContext()?.getHostContext()?.getApplicationContext().filesDir + '/waterMask.svg';
       securityManager.setWatermarkImage(wantTemp, bundleName, svgPath, accountId);
       console.info(`Succeeded in setting set watermarkImage policy.`);
     } catch(err) {
       console.error(`Failed to set watermarkImage policy. Code: ${err.code}, message: ${err.message}`);
     }
   }

2.3 水印效果

图7-1 全屏明水印效果

图7-2 应用水印效果

3. Q&A

Q:水印接口需要传入应用包名,作为开发者如何获取应用包名?

A:可通过hdc命令行工具查询当前设备包名,可参考文档:查询应用信息命令(dump)

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐