如何在indesign脚本中编写inresponse



我正在运行这个脚本,以获取一个索引文件的所有表单字段。

var _ALL_FIELDS = "";
var allFields = myDocument.formFields;
for(var i=0;i<allFields.length;i++){
     var tf = allFields[i];
     alert(tf.id);
     alert(tf.label);
     alert(tf.name);
     alert(_ALL_FIELDS = _ALL_FIELDS +","+ tf.name);
}

我所做的是,创建一个基于soap-java的客户端并调用runscript方法。现在我能够获得这些字段,但如何将这些字段发送回客户端,即如何在响应中编写此字段,然后在客户端如何从响应中读取它。

调用runscript方法的代码为:-

Service inDesignService = new ServiceLocator();
ServicePortType inDesignServer = inDesignService.getService(new URL(parsedArgs.getHost()));
IntHolder errorNumber = new IntHolder(0);
StringHolder errorString = new StringHolder();
DataHolder results = new DataHolder();
inDesignServer.runScript(runScriptParams, errorNumber, errorString, results);

我也在文档中发现runScript方法返回RunScriptResponse,但在我的情况下,它返回void。

http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/indesign/sdk/cs6/server/ids-solutions.pdf

看起来您想要返回一个formField名称数组。你可以利用javascript中的everyItem()集合接口方法:

var result = myDocument.formFields.everyItem().name;
result;

javascript将返回被调用脚本中的最后一个值,所以为了使它完全明显,最后一行只是要返回的值。

在Java端,runScript方法将结果变量作为第四个参数传递,您将在这里找到响应。因此,在代码片段之后,您可能会有这样的内容:

List<String> formFieldNames = new ArrayList<String>();
if (results.value.getData() != null) {
    Data[] resultsArray = (Data[]) results.value.getData();
    for (int i = 0; i < resultsArray.length; i++) {
        formFieldNames.add(resultsArray[i].getData().toString()); 
    }
}

最新更新