テキストブロックの内容を比較する/移動する

InDesign CSにもスクリプトで制御することができます。AppleScript、VBScript、JavaScriptのいずれかで制御することができますので、自分の好きな(?)もしくは使えるものを使うことができます。ただし、AppleScriptはMacintoshのみ、VBScriptはWindowsのみの動作になります。両方のプラットフォームで動作するのはJavaScriptのみです。ここではMacintosh、Windows両方で動作するJavaScriptでの例を示します。

まず、InDesign CSで2つのテキストブロックの内容=文字が同じものかどうか比較するスクリプトを示します。これは以下のようになります。

sel = app.activeDocument.selection;
if (sel[0].contents == sel[1].contents)
{
alert("2つのテキストブロック内のテキストは同じです");
}else{
alert("2つのテキストブロック内のテキストは違います");
}

使い方は2つのテキストブロックを選択し、このスクリプトを実行します。実行する前に説明が必要でしょう。InDesign CSは他のAdobeのソフトと異なりメニューからスクリプトを選択して実行するようにはなっていません。InDesign CSでは特定のフォルダ内(MacintoshではInDesign CSがあるフォルダのPresetsフォルダ内のScriptsフォルダ内。Windowsでも多分同じだと思います)にスクリプトを入れることにより認識され使えるようになります。使用する場合はスクリプトパレット上のスクリプトリストから実行したいものをダブルクリックします。

また、スクリプトで日本語を使う場合は注意が必要です。InDesign CSの場合は日本語文字コードをUnicode (UCS-2)にしないと正しく表示されません。Photoshop CS、AfterEffects 6.xではUTF-8ですが、UTF-8ではInDesign CSでは日本語が表示されなくなります。ちなみにIllustrator CSではShift JISコードになっています。ここらへんは、どれかに統一して欲しいところです。
スクリプトファイル名の拡張子は.jsにしないとスクリプトとして認識されず、パレットに表示されません。また、MacOS Xの場合はファイル名に日本語を使用するとスクリプトとして認識されません。

それでは次のスクリプトです。これは選択されたテキストブロックのフレームの位置とサイズを変更するものです。[0,0,100,50]の部分がフレームの枠の座標になります。最初の値が上側、2番目が左側、3番目が下側、4番目が右側の座標になります。単位を省略した場合は環境設定で指定されているものになります。

sel = app.activeDocument.selection;
for (i=0; i<sel.length; i++)
{
sel[i].visibleBounds = [0,0,100,50];
}

単位を付けて指定する場合は以下のようになります。

sel[i].visibleBounds = [0,0,"100pt","7.7cm"];

ポイント(pt)やcm(センチメートル)、mm(ミリメートル)、pc(パイカ)などを指定することができます。単位を付ける場合には"〜"または'〜'で囲まないとエラーになります。

ページ内にあるテキストフレーム以外を削除したい場合は以下のスクリプトになります。

sel = app.activeDocument.selection;
for (i=0; i<sel.length; i++)
{
if (sel[i].toString() != "[object TextFrame]")
{
sel[i].remove();
}
}


これはテキストフレーム以外を削除しますが、逆にテキストフレームのみ削除したい場合は

if (sel[i].toString() != "[object TextFrame]")

if (sel[i].toString() == "[object TextFrame]")

にしてください。!=を==に変更するだけです。




[サンプルをダウンロード]