本文详解如何在 acrobat javascript 中,根据签名字段所在页码,精准地将当前页及之前所有页面上的指定字段(如 "kvial"、"mvial")设为只读,避免误锁后续页面字段。
在 Adobe Acrobat 表单自动化中,常需实现场景:当用户在某页完成电子签名后,自动锁定该页及所有此前页面(page ≤ 当前页)上的关键字段,防止回填篡改。但原代码存在两个典型问题:
✅ 正确思路是:以字段真实页码(currentField.page)为唯一判断依据,结合字段名特征进行精细化控制。
// 获取触发事件的签名字段所在页码(0 起始索引) var currentPageNum = event.target.page; //遍历文档中每一个表单字段 for (var i = 0; i < this.numFields; i++) { var currentField = this.getField(this.getNthFieldName(i)); // 确保字段存在且有有效页码信息 if (!currentField || currentField.page === null) continue; // 【核心逻辑】仅对当前页及之前页的字段启用只读 if (currentField.page <= currentPageNum) { // 所有目标页字段统一设为只读 currentField.readonly = true; // 特别处理:同步锁定全局字段 "office" if (currentField.name === "office") { currentField.readonly = true; } // 精准识别并锁定跨页特殊字段(如 "1kvial", "5mvial" 等) var fieldName = currentField.name; if (fieldName.endsWith("kvial") || fieldName.endsWith("mvial")) { // ✅ 仅当该字段实际位于当前页或之前页时才锁定(已由外层 if 保证) currentField.readonly = true; } } } // 【可选增强】显式补充常见编号字段(若命名不规范或需兜底) for (var j = 1; j <= 15; j++) { var kvialField = this.getField(j + "kvial"); var mvialField = this.getField(j + "mvial"); if (kvialField && kvialField.page <= currentPageNum) { kvialField.readonly = true; } if (mvialField && mvialField.page <= currentPageNum) { mvialField.readonly = true; } } // 最终显示控制区域(如提示区块) this.getField("block").display = display.visible;
通过以上实现,即可严格满足「签名后,仅当前页及之前页的 kvial/mvial 字段变为只读」这一业务需求,兼顾健壮性与可维护性。