文字の座標値を得る

一体何に使うんだ? という声もあるでしょうが、そのうち何かのプログラムで必要になるときもあるはず(まるできれいな紙袋をとっておくときの決まり文句)。

文字の座標位置(イラストレータでいうとアンカーポイントだな)を取得します。X座標はhorizontalOffset、Y座標はbaselineで取得できます。ともにRead Onlyなので取得できても設定はできない(考えてみれば当たり前の話)。


上のようなドキュメントがあったとします。そこで次のスクリプトを実行。

var myChrs = app.activeDocument.textFrames[0].characters;
for ( i = 0 ; i < myChrs.length ; i++) {
    myAnchor(myChrs[i]);
}
var myChrs = app.activeDocument.textFrames[1].characters;
for ( i = 0 ; i < myChrs.length ; i++) {
    myAnchor(myChrs[i]);
}

function myAnchor (myChr) {
    myOval = app.activeDocument.ovals.add();
    myOval.fillColor = "Red";
    myOval.geometricBounds = [
        myChr.baseline - 1,
        myChr.horizontalOffset - 1,
        myChr.baseline + 1,
        myChr.horizontalOffset + 1
    ];
    return ;
}

次の図のような結果になります。


これ、大体はPDFを無理やりイラストレータで開いたときの×印の位置ですね。ところが和欧間のアキがあるところはアキは和文の方についています。これ要注意ですね。

で、これの利用方法はというと、
・オブジェクトをテキストの位置にあわせたいとき
(テキストの背面などアンカーオブジェクトが使えないケースで)
・選択している文字がページの上から何行目かを知りたいとき
(参照先を「○○ページ○行目」と指定する本があるそうな)
とかが考えられます。わたしはそんなケースに出くわしたことがないので(話は聞くけど)、実際に使えるかどうかは保証できましぇん。