我正在运行此脚本以获取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
答案 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());
}
}