基于JS对象的多维数组在PDF表单中删除数据的问题求助
解决Acrobat PDF表单中密码记录无法删除的问题
1. 替换静态数据初始化,改用持久化存储
你之前把数据写死在文档级初始化脚本里,导致每次表单加载都会重新执行这段脚本,覆盖你用splice()修改后的临时数组。必须改用Acrobat JS支持的持久化存储方案:
- 方案一:全局存储(Acrobat应用级,所有表单可访问)
// 文档级初始化脚本 var passwordRecords; // 先检查是否已有存储的数据,没有则初始化默认记录 if (global.passwordRecords) { passwordRecords = global.passwordRecords; } else { passwordRecords = [ {id: 1, site: "Example", user: "test", pass: "123456"}, // 其他默认记录 ]; global.passwordRecords = passwordRecords; }
- 方案二:文档级存储(仅当前PDF可用,更安全)
// 文档级初始化脚本 var passwordRecords; if (!doc.dataObjects.exists("PasswordRecords")) { // 首次创建数据对象并初始化默认值 var dataObj = doc.dataObjects.add("PasswordRecords"); dataObj.value = JSON.stringify([ {id: 1, site: "Example", user: "test", pass: "123456"} ]); } // 读取存储的数据 passwordRecords = JSON.parse(doc.dataObjects.get("PasswordRecords").value);
2. 执行删除操作后同步持久化
删除选中记录时,调用splice()修改内存数组后,必须把修改后的数组重新存回持久化存储:
// 删除按钮的点击脚本 function deleteSelectedRecord() { // 替换成你实际获取选中记录索引的逻辑 var selectedIndex = getSelectedRecordIndex(); if (selectedIndex !== -1) { // 删除对应索引的记录 passwordRecords.splice(selectedIndex, 1); // 同步到全局存储(对应方案一) global.passwordRecords = passwordRecords; // 或者同步到文档级存储(对应方案二) // doc.dataObjects.get("PasswordRecords").value = JSON.stringify(passwordRecords); // 刷新查询视图,重新渲染表单字段 refreshQueryView(); // 替换成你实际的视图刷新函数 } }
3. 确保视图渲染依赖持久化数据
修改查询视图的渲染逻辑,让它始终从持久化存储的数组中读取数据,而不是从初始化时的静态数组。这样删除操作后,刷新视图就能看到更新后的结果。
4. 验证数据修改有效性
删除操作完成后,可通过Acrobat的JS控制台(按Ctrl+J打开)执行以下命令验证:
- 全局存储:
console.log(global.passwordRecords) - 文档级存储:
console.log(JSON.parse(doc.dataObjects.get("PasswordRecords").value))
关闭并重新打开表单后再次执行上述命令,确认数据没有恢复到初始状态。
内容的提问来源于stack exchange,提问作者user14825633
相关产品推荐
相关产品推荐

