如何在indesign脚本中写入响应

时间:2014-06-19 09:45:59

标签: adobe-indesign run-script indesign-server

我正在运行此脚本以获取indd文件的所有表单字段。

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);

另外我在docs中发现runScript方法返回RunScriptResponse,但在我的情况下,它返回void。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

在Java端,runScript方法将结果变量作为第4个参数传递,这就是您可以找到响应的位置。因此,在您的代码段之后,您可能会遇到以下情况:

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()); 
    }
}