ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HarmonyOS 7 新特性(四十八)|PDF Kit:预览、批注与原子保存

HarmonyOS 7 新特性(四十八)|PDF Kit:预览、批注与原子保存 PDF 预览看似是“把文件交给组件”真正上线后却会遇到大文件首开慢、加密文档、沙箱路径、分页布局、搜索高亮、批注保存、外链跳转、内存释放和编辑冲突。PDF Kit 提供pdfService、pdfViewManager.PdfController和PdfView等能力API 26 适配的重点是把控制器生命周期和业务文档状态设计完整。本文以合同审阅场景为例搭建一条“安全导入—加载—预览—搜索—批注—原子保存—释放”的工程链路并明确哪些接口需要按设备与 SDK 再验证。一、先区分文档与视图状态文件本身的版本、校验值和权限不应混在页面缩放、当前页与布局状态中。interfacePdfDocumentState{documentId:stringlocalPath:stringsha256:stringversion:numberreadOnly:booleanencrypted:boolean}interfacePdfViewState{pageIndex:numberzoom:numbercontinuous:booleanlayout:SINGLE|DOUBLEsearchQuery?:string}视图可随时重建文档状态则需要持久化和并发控制。二、导入文件先进入应用沙箱无论文件来自资源、选择器、分享还是下载都先复制到受控目录限制大小、扩展名和来源。interfacePdfImportPolicy{maxBytes:numberallowedMime:string[]requireHash:boolean}functionvalidateImport(meta:{size:number;mime:string},p:PdfImportPolicy){if(meta.sizep.maxBytes)thrownewError(PDF_TOO_LARGE)if(!p.allowedMime.includes(meta.mime))thrownewError(UNSUPPORTED_TYPE)}不要直接长期依赖临时 URI。复制时使用随机文件名原始文件名只作为显示信息并做字符清洗。三、控制器与页面生命周期成对官方预览示例使用new pdfViewManager.PdfController()、loadDocument()和PdfView。页面销毁或切换文档时必须释放。import{pdfService,pdfViewManager,PdfView}fromkit.PDFKitEntryComponentstruct PdfReaderPage{privatecontroller:pdfViewManager.PdfControllernewpdfViewManager.PdfController()asyncaboutToAppear(){constresultawaitthis.controller.loadDocument(this.localPath)if(result!pdfService.ParseResult.PARSE_SUCCESS){this.showLoadError(result)}}aboutToDisappear(){this.controller.releaseDocument()}}生命周期方法和releaseDocument的异常处理以目标 SDK 为准核心原则是一个已加载文档只由明确所有者释放一次。四、加载过程做状态化错误处理typePdfLoadState|{kind:COPYING;progress:number}|{kind:PARSING}|{kind:READY;pageCount:number}|{kind:PASSWORD_REQUIRED}|{kind:FAILED;code:string;retryable:boolean}损坏、加密、权限不足、空间不足和内存不足的恢复方式不同。不要统一显示“打开失败”。加密文档密码不得写入日志或持久化明文。五、预览参数按设备形态自适应手机默认单页连续滚动平板横屏和 PC 可使用双页缩放与页面适配需要保留用户上下文。interfacePdfLayoutPolicy{widthVp:numberorientation:PORTRAIT|LANDSCAPEinput:TOUCH|MOUSE}functionchooseLayout(p:PdfLayoutPolicy):SINGLE|DOUBLE{returnp.widthVp840p.orientationLANDSCAPE?DOUBLE:SINGLE}通过控制器提供的页面布局、连续滚动、适配、间距和缩放接口设置视图切换布局后尽量保持当前页和阅读锚点。六、搜索采用可取消会话PdfController提供关键字搜索、清除搜索和索引控制能力。用户连续输入时取消或覆盖旧会话。interfaceSearchSession{id:numberquery:stringstartedAt:number}classPdfSearchCoordinator{privatecurrent0next(query:string):SearchSession{return{id:this.current,query:query.trim(),startedAt:Date.now()}}isCurrent(id:number){returnidthis.current}}空查询立即清除高亮。对超大文档显示搜索进度结果跳转后保留“第 N/总数”反馈。七、高亮与文本选择遵守坐标语义PDF 坐标、屏幕坐标、缩放和旋转可能不同。业务侧保存页码与文档坐标不保存屏幕像素。interfaceDocumentRect{pageIndex:numberleft:numbertop:numberright:numberbottom:numberrotation:number}旋转或单双页切换后重新投影显示。选择回调、矩形变化和文本选择监听的注册时机按 API 文档处理。八、批注用命令日志保证可撤销高亮、下划线、文本注释和形状等编辑不要直接散落调用。统一转成命令记录操作者、文档版本和撤销信息。interfaceAnnotationCommand{commandId:stringdocumentVersion:numberpageIndex:numbertype:ADD|UPDATE|DELETEannotationId?:stringpayload:Recordstring,unknowncreatedAt:number}控制器的enableAnnotation、添加/更新/删除批注等接口只由命令执行器调用便于审计和失败重试。九、保存使用临时文件加原子替换直接覆盖原文件崩溃或磁盘不足会损坏唯一副本。asyncfunctionatomicSave(target:string){consttemp${target}.savingawaitpdfGateway.saveDocument(temp)awaitfsyncFile(temp)awaitverifyPdf(temp)awaitreplaceFile(temp,target)}保存前比较文档版本发现服务端或其他端已更新时进入冲突流程不静默覆盖。十、外链点击必须验证PDF 内可包含 URI 跳转。registerActionClickListener收到目标后先校验协议、域名和用户意图。functionallowedPdfLink(raw:string):boolean{consturlnewURL(raw)if(url.protocol!https:)returnfalsereturn[docs.example.com,help.example.com].includes(url.hostname)}未知域名用系统确认页或阻止不允许javascript:、file:和任意自定义 scheme 静默执行。十一、大文件的内存与缩略图治理不要一次将每页转换成全分辨率 PixelMap。缩略图按可见窗口生成设 LRU 上限页面离开后释放。interfaceThumbnailBudget{maxEntries:numbermaxBytes:numberprefetchBefore:numberprefetchAfter:number}constbudget:ThumbnailBudget{maxEntries:24,maxBytes:48*1024*1024,prefetchBefore:2,prefetchAfter:4}滚动速度快时减少后台生成避免与正文渲染争抢资源。十二、隐私与生命周期清理合同、病历和账单类 PDF 属于敏感内容。进入后台时按业务要求遮罩最近任务缩略图登出清除临时文件、搜索词和批注草稿。interfacePdfRetentionPolicy{cacheTtlMs:numberremoveOnLogout:booleanredactRecentTask:booleanallowExport:boolean}导出、分享和保存副本必须检查权限与水印策略。十三、测试矩阵constpdfCases[1-page-small,1000-page-large,encrypted,corrupted,mixed-page-size,rotated-page,annotation-save,disk-full,external-link,background-restore]手机、平板和 PC/2in1 分别验证触摸、鼠标、键盘、窗口缩放与单双页。性能报告记录首屏、翻页、搜索、保存和峰值内存。十四、上线检查清单外部 PDF 复制到受控沙箱并校验大小、类型和哈希控制器加载与释放成对加密、损坏、空间不足等错误可区分布局按设备形态切换并保留阅读位置搜索会话可取消空查询清理高亮批注操作可撤销、可审计保存采用临时文件与原子替换PDF 外链经过协议和域名校验缩略图和 PixelMap 有内存预算登出、后台和导出遵守隐私策略。结语PDF Kit 提供了丰富的预览与编辑原子能力但产品质量取决于控制器生命周期、文件一致性、安全跳转和资源预算。把文档状态与视图状态分离用可取消搜索、命令化批注和原子保存构建闭环再覆盖大文件、加密与多设备输入PDF 功能才能从“能打开”走向可用于真实业务。官方参考PDF Kit 产品介绍https://developer.huawei.com/consumer/cn/sdk/pdf-kit/预览 PDF 文档https://developer.huawei.com/consumer/cn/doc/doccenter-capabilities/pdf-pdfview-componentPDF Kit API 总览https://developer.huawei.com/consumer/cn/doc/doccenter-capabilities/api/pdf-api
返回列表