You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:22:47