読者です 読者をやめる 読者になる 読者になる

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

DTPオペレーターのInDesign用スクリプトのメモ。

フレームサイズで条件分岐

フレーム幅を条件にした処理をしたいときの話。
たとえば幅60mmのテキストフレームだけにある処理をしたいよーというとき、まず思いつくのはこんな書き方ではないでしょうか。

var myTF = app.activeDocument.textFrames;
for (var i=0; i<myTF.length; i++) {
    var y1 = myTF[i].visibleBounds[0];  //左上y
    var x1 = myTF[i].visibleBounds[1];  //左上x
    var y2 = myTF[i].visibleBounds[2];  //右下y
    var x2 = myTF[i].visibleBounds[3];  //右下x

if (x2-x1 == 60){
    なんらかの処理
}

でもこの書き方だと、条件に合致するにも関わらず処理が行われない場合が。ナゼ?
それは、InDesignの画面上ではたしかにW=60mmですが、InDesignの内部的には59.99999……
みたいな寸法になっていることがあるからなのです(ESTKのデータブラウザで確認可)。

なので、if文をこんな感じで書くと、フレームの寸法を条件化することができマス。

if (x2-x1 > 59.9 && x2-x1 <60.1){
    なんらかの処理
}

roundを使って四捨五入するのが本筋なのかもしれませんが、この方が楽なのでこっちを使ってます。
もっとスマートな書き方があれば教えてくださいませ…