とあるDTPオペレーターのInDesignスクリプト備忘録

デザイナー上がりですがいまはDTP命。InDesign用スクリプトの解説などを綴っています。読者登録して戴けると励みになります。

フレームの属性をスクリプトで調べる

読者もいないので、入門コラムはお休みしてちょっとしたスクリプトネタを。

ページ上のフレームに何らかの処理をするスクリプトを書くような場合に、フレームの属性を指定しないとうまく動作しない場合があります。
たとえば「フレーム内の文字やストーリー」に対してなんかするスクリプトは、ストーリー情報を持たない画像フレームが処理対象になったときにエラーを出します。
あるいは画像に対してなんかするスクリプトは、画像フレーム以外が処理対象になったときにエラーを出します。

こうした場合はif文を書いて属性を指定してあげないといけません。try...catchでざっくりエラー回避することもできるっちゃできるのですが、狙った動作にならない場合があります。
やはりフレーム属性により処理を分ける方法を知っておいたほうがいいでしょう。

属性を指定する場合は「constructor.name」で行います。たとえば

if(constructor.name == "TextFrame")

と打つと「テキストフレームであること」を条件にすることができます。
逆に「テキストフレーム以外」を条件にする場合は

if(constructor.name != "TextFrame")

で可能です。「!=」が「右辺以外」という意味です。
(「textFrame」でも「textFrames」でも「Textframe」でもなく「TextFrame」なのに注意!)

ちなみにTextFrame以外にも以下のような属性があります。

 Rectangle…四角
 Oval…円
 Polygon…多角形
 GraphicLine…線

処理対象がどれなのか分からないときは、いっそのこと「スクリプトを使って調べる」という方法があります。
調べたいフレームを選択して

$.writeln (app.selection[0].constructor.name)
//もしくは
alert(app.selection[0].constructor.name)

をESTKで実行すれば、即座に属性名が表示されます。
($.writelnで実行すればESTKのJavaScriptコンソール上に、alertで実行すればInDesignのアラートとして表示されます)
見た目が四角でもまれにPolygonだったりするので、うまく行かないときは確認してみると良いでしょう。

こんなふうに、場合によっては「スクリプトで調べる」という方法が役立つ場合があります。