Index > MacでExtendScript, AppleScript から InDesignを起動して "こんにちは" な話 (Groovyからの起動おまけ付き)
Fri, April 9, 2010

MacでExtendScript, AppleScript から InDesignを起動して "こんにちは" な話 (Groovyからの起動おまけ付き)

最終目標は、Mac上のGroovyからInDesignのExtendScript(JavaScript)を 起動すること。

考え方としては、

  1. GroovyからAppleScriptを起動
  2. AppleScriptからInDesignを起動
  3. AppleScript内から do script を使ってJavaScriptを実行

という手順。

Step1 とりあえず AppleScript から実行

まずは、最初の段階として、AppleScript からInDesignを起動して、hello してみる。

コード hello.applescript

tell application "Adobe InDesign CS3"
do script "alert('Hello');" language javascript
end tell

実行

$ osascript hello.applescript

実行すると、InDesignCS3 が起動し、hello という文字列を表示したダイアログが出ます。

Step2 この AppleScript を Groovy から実行

コード run.groovy

def cmd = ''' 

tell application "Adobe InDesign CS3"
do script "alert('hoge')" language javascript
end tell

'''

def args = ['osascript','-e',cmd]
args.execute()

実行

$ groovy run.groovy

Step3 改良版、ExtendScript(JavaScript)は外部ファイルで与える

コード run.groovy

//
// 引数として渡された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の実行
//

def myJS = new File(args[0]).text
myJS     = myJS.replaceAll('"','\\\\"') 

def cmd = """ 

tell application "Adobe InDesign CS3"
do script " $myJS " language javascript
end tell

"""

def args = ['osascript','-e',cmd]
args.execute()

コード hello.jsx

alert('hello');

実行

$ groovy run hello.jsx

はまりポイント( 注意点 )

このサンプルで、指定された javascript を読み込んだあと...

myJS     = myJS.replaceAll('"','\\\\"') 

としているが、これは、" をエスケースするため。

do script " $myJS " language javascript

の行で実行するため、" をエスケープしておかないとうまく実行できない。

 Twitter
follow me on Twitter
 Categories