2010年3月24日水曜日

「第一回テクニカルDTP勉強会」フォロー、IllustratorのScript作成のTips

2010年3月20日「テクニカルDTP勉強会」第一回が開催され、自分も拙いながらも発表させていただきました。この記事はそのフォローアップです。

まず、スクリプトの便利さを示すために、最近書いたIllustrator用のスクリプトのデモ。
それから自分がどのようにスクリプトを書いているかを、実際に書きながら説明していきました。

自分が普段使っているツールは、動作確認のためのIllustrator(主にCS3)、ExtendScript Toolkit2、それとTextMateを併用しています。

まず、(function(){})()を書きます。
(function(){

})()
これは、「なるほどreturnすりゃ止まるんだ」に書いた通り、変数名が干渉しないようにと、スクリプトを抜けたいときreturnで抜けられるようにするためです。
次に、自分のブログの「Illustratorで、選択オブジェクトの持つプロパティと値をコンソールに書き出す」にある下の2行をコピペします。
(function(){
var o=app.activeDocument.selection[0];
(function(o){for(var i in o){try{i+=':'+o[i]}catch(e){i+=':'+e}$.writeln(i)}})(o);
})()
※InDesignで同じことをする場合は、$.writeln(obj.properties.toSource().replace(/,/g,",\n")); を使う事が多いです。

Illustrator上の調べたいオブジェクトを選択して、スクリプトを実行。



すると、ExtendScript ToolkitのJavaScriptコンソールに、選択アイテムのプロパティが書き出されます。
それらを全選択して、一旦TextMateへペーストしておきます。



次に、「オブジェクトの位置を調べたい」とするなら、そのオブジェクトの位置を少し移動してみます。



コンソールを一度クリアした上で、もう一度スクリプトを実行。コンソールに書き出された内容をコピーします。

TextMateにはdiff(テキストの差分を比較する)機能が付いています。
テキストがコピーされた状態で、Bundles→Diff→Document With Clipboard を実行します。



すると、ファイルの差分が別ウィンドウで表示されます。


これで差が表示された部分、anchor, position, width, geometricBounds, visibleBounds, controlBounds, top, leftは位置に関係したプロパティであることがわかります。
調べたいプロパティに目星がついたら、ExtendScriptのオブジェクトモデルビューアやPDFのリファレンス等で意味を調べ、スクリプトを書いて行きます。

こうやって実際に動かしながらプロパティを調べていくことで、掘り進むようにスクリプトを完成させていくわけです。

……以上が今回の勉強会で自分が発表した内容でした。
参考になりましたでしょうか?
ほぼ即興での発表になりましたので、いろいろたどたどしい、分かりにくい部分があったように思います。
また機会がありましたら、よろしくお願いします。

2010年3月5日金曜日

InDesignでテキストフレームを連結するスクリプト


選択したテキストフレームを上から順に(タテ組みなら右から順に)連結するスクリプトのサンプル。
写真のキャプションをまとめて作りたい時なんかに使えるかも。
MacOSX 10.5.8、InDesignCS3 5.0.4にて動作。他バージョンの検証はしていません。


2010.4.9追記:
@iki_osu さんに「タテ組の場合左から順になってしまう」との指摘をいただいたので、右からになるように修正しました。