1

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

また、ドキュメントでrunScriptメソッドが返すことを発見しましたRunScriptResponseが、私の場合はvoidを返しています。

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

4

1 に答える 1

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()); 
    }
}
于 2014-10-20T23:22:21.260 に答える