Acrobat跨PDF同名表单域值复制脚本失效问题求助
Acrobat跨PDF表单域值复制脚本故障排查与修复
问题描述
我在Acrobat中编写了一段脚本,用于将一个PDF表单的同名表单域值复制到另一个PDF表单,但脚本未按预期执行——仅能将值输出到JS控制台,目标PDF表单域始终为空。我尝试通过按钮的鼠标抬起事件和自定义菜单项运行脚本,结果一致。
原脚本代码
// sample script to copy form field data from one PDF to another with the same form field name var sourceFld = getField("dataSrc"); sourceFld.value = getField("dataSrc").value;// assign data/value to a var var oTargetDoc = null;// script to access target doc for(var i=0;i<app.activeDocs.length;i++){ if(app.activeDocs[i] != this){ oTargetDoc = app.activeDocs[i]; break; } } if(oTargetDoc){ //get form field from target doc var targetFld = this.getField("dataSrc"); targetFld.value = sourceFld.value;//copy data from source PDF field to target PDF data field } if(targetFld.value != ""){ app.alert({ cMsg: "Data Transfer Success!", Title: "EasyPDF™ Password Manager Copy Data", nIcon: 3 }); console.println(targetFld.value);//print the data copied to the target PDF form field to the JS console } else app.alert({ cMsg: "Data Transfer Failed!", Title: "EasyPDF™ Password Manager Copy Data", nIcon: 3 });
问题根源
- 目标域获取错误:在
if(oTargetDoc)块中,用this.getField("dataSrc")获取的仍是当前源文档的表单域,而非目标文档oTargetDoc的,导致仅在源文档内赋值,未操作目标文档。 - 冗余代码:
sourceFld.value = getField("dataSrc").value完全多余,sourceFld已指向源域,直接调用sourceFld.value即可。 - 异常情况未处理:未判断目标文档是否存在对应表单域,若缺失会导致脚本报错,后续逻辑也会因
targetFld未定义失效。
修正后的脚本
// 跨PDF复制同名表单域值 var sourceFld = this.getField("dataSrc"); if (!sourceFld) { app.alert({ cMsg: "源文档未找到dataSrc表单域!", Title: "复制失败", nIcon: 0 }); console.println("错误:源文档不存在dataSrc域"); return; } var oTargetDoc = null; // 遍历活动文档找到目标文档 for(var i = 0; i < app.activeDocs.length; i++){ if(app.activeDocs[i] !== this){ oTargetDoc = app.activeDocs[i]; break; } } if(!oTargetDoc){ app.alert({ cMsg: "未找到打开的目标PDF文档!", Title: "复制失败", nIcon: 0 }); console.println("错误:未检测到其他活动PDF文档"); return; } var targetFld = oTargetDoc.getField("dataSrc"); if (!targetFld) { app.alert({ cMsg: "目标文档未找到dataSrc表单域!", Title: "复制失败", nIcon: 0 }); console.println("错误:目标文档不存在dataSrc域"); return; } // 执行赋值 targetFld.value = sourceFld.value; // 验证并提示 if(targetFld.value === sourceFld.value){ app.alert({ cMsg: "数据传输成功!", Title: "EasyPDF™ Password Manager 复制数据", nIcon: 3 }); console.println("已复制值到目标域:" + targetFld.value); } else { app.alert({ cMsg: "数据传输失败!", Title: "EasyPDF™ Password Manager 复制数据", nIcon: 0 }); console.println("错误:目标域值与源域不一致"); }
额外注意事项
- 确保源文档和目标文档均已打开,且都包含名为
dataSrc的表单域。 - 运行脚本时,当前活动文档需为源文档(即存储待复制值的PDF),否则会遍历到错误的目标文档。
- 若文档来自不同安全域(如本地文件与网络文件),需在Acrobat设置中开启跨文档访问权限:
编辑→首选项→JavaScript→勾选"允许跨文档访问"。
内容的提问来源于stack exchange,提问作者Boilermaker73
相关产品推荐
相关产品推荐

