2010年2月22日月曜日

GroovyからInDesignを叩く(Mac限定)

昔、ターミナル、AutomatorからAdobeアプリ用JavaScriptを呼び出すというエントリを書いたことがあるんですが、Macならコマンドを叩ける言語であれば、基本的にどんな言語からでもAppleScriptを介してExtendScriptを呼べるはずです。

なので、GroovyからInDesignを呼んでみます。
String[] init = ["osascript", "-e",
'''
tell application "Adobe InDesign CS3"
do script "

#targetengine \\"groovy\\"
$.evalFile(\\"~/Desktop/json2.js\\");

" language javascript
end tell
'''
]
init.execute()

String[] args = ["osascript", "-e",
'''
tell application "Adobe InDesign CS3"
do script "
#targetengine \\"groovy\\"
(function(){

var obj={};
var sels = app.activeDocument.selection;
for(var i=0;i<sels.length;i++){
if(sels[i].constructor.name === \\"TextFrame\\"){
var id = sels[i].id;
var cont = sels[i].contents;
obj[id] = cont;
alert(cont)
}
}
return JSON.stringify(obj);
})()

" language javascript
end tell
'''
]

def ary = []
def proc = args.execute().text.readLines().collect{ary.push(it)}
def cont = ary.join('')
println cont

実行結果。


返り値。


値のやりとりをどうするか考えたんですが、結局json2.jsを使う事にしました。
targetengineを指定することで、セッション間でも読み込んだライブラリを使い回すことができます。
一度Javaのコンパイラを通るので、スクリプト内のバックスラッシュは2重にしないといけません。

これでちょっとGroovyが流行るの希望。

0 件のコメント: