GroovyからInDesignを叩く(Windows限定) 〜 Groovy から InDesign CS3 のJavaScriptを実行する方法
ExtendScript Toolkit を使わないで、 直接InDesignのCOMを経由してExtendScript(JavaScript,VBScript)を実行する方法。
自動組版の一連の流れの中でInDesignをスクリプト経由で使う場合に いままでそこだけ手動で、InDesign起動してスクリプト実行、という手作業が入らざる得なかったわけですが、 make 一発ですべての処理を一括で行うことができそうです。
MacOSXユーザの方は、 わたしがいつもお世話になっている カネムーメモ GroovyからInDesignを叩く(Mac限定) が参考になります。
TOC
事前準備
が必要です。 あらかじめインストールしておきます。
helloind.groovy
import org.codehaus.groovy.scriptom.*
Scriptom.inApartment
{
def myJS = 'alert("Hello");'
int lang = 1246973031
//def indapp = new ActiveXObject('InDesign.Application')
//def indapp = new ActiveXObject('InDesign.Application.CS4_J')
def indapp = new ActiveXObject('InDesign.Application.CS3_J')
indapp.doScript(myJS, lang )
}
new ActiveXObject() の引数で、 Indesign CS3, CS4 を明示的に区別 してオブジェクトを作成することができる。
※)lang の値は何?
Adobe InDesign CS3 Server Scripting Guide 内に記述があった、JavaScript言語を表す数値です。
Indesign CS3 ではこの値でうまく作動していますが、 CS4 などでは違う値になっているかもしれないので注意が必要です。
実行
$ groovy helloind
InDesignCS3 が起動して Hello と表示されます。
実践編
helloind.groovy の中で毎回書き直す部分は、 myJS 変数に入れるExtendScript(JavaScript)部分だけ。 この部分を外部ファイルから読むようにしたのが ind.groovy です。
ind.groovy
import org.codehaus.groovy.scriptom.*
//
// 引数として渡されたJSファイルのチェック
//
boolean ng=false
if( args.size()<1 ){ ng=true }
else if( new File(args[0]).exists()==false ){ ng=true }
if(ng){
System.exit(0)
}
//
// ExtendScriptの実行
//
Scriptom.inApartment
{
def myJS = new File(args[0]).text
int lang = 1246973031 // javascript
//def indapp = new ActiveXObject('InDesign.Application')
//def indapp = new ActiveXObject('InDesign.Application.CS4_J')
def indapp = new ActiveXObject('InDesign.Application.CS3_J')
indapp.doScript(myJS, lang )
}
my.jsx
ind.groovy で実行するExtendScriptです。
alert('Hello');
c:\home\test.txt にあるファイルを読み出して alert するコード. パスは /c/home/test.txt のように書けばよい。
/ から始めない場合は、マイドキュメントに該当するパスが暗黙に設定されるようです。
使い方
$ groovy ind my.jsx
おまけ(VBScript編)
同じことをVBScriptでやるには...
単にInDesignのExtendScriptを走らせるだけならば、この方が楽か。 GroovyやScriptomのインストールも不要だし。
helloind.vbs
myJS = "alert('Hello');"
lang = 1246973031
Set myInDesign = CreateObject("InDesign.Application.CS3_J")
myInDesign.DoScript myJS,lang
コマンドプロンプトから実行
$ cscript helloind.vbs
GUIから実行
Windowsエクスプローラで helloind.vbs をダブルクリックすればOK.