フレームグリッドの文字数と行数をスクリプト制御

InDesign ではすべての属性がスクリプト可能なのかと思いきや、フレームグリッドの基本情報である文字数/行数だけはなぜか簡単に読み書きする方法が用意されてない。日本語圏では頻繁に操作する箇所なので、自分でメソッドを作った。

  • 縦組み/横組み
  • テキストサイズ単位や組版単位などの違い
  • 段数、段間
  • 字間、行間
  • フレーム内マージン
  • フレームの線の太さ

などの設定をすべて考慮して、テキストフレームの geometricBounds から文字数と行数を逆算する仕組み。

TextFrame.prototype の拡張になっているので、外部ファイル扱い (.jsxinc) にしておいて #import で適宜読み込むのがおすすめ。

使い方

Getter と setter を兼ねた gridDimensions() というメソッドになっている。そのまま呼び出せば get、引数を渡して呼び出せば set として動作する。

フレームの種類が「フレームグリッド」に設定されているテキストフレームにのみ有効。フレームグリッドでない場合はエラーを返す。

Get

1段のサイズが 15文字 × 20行 のテキストフレーム myTextFrame があるとすると、

myTextFrame.gridDimensions();

[15, 20] という [文字数, 行数] 形式の array を返す。

Set

同じく [文字数, 行数] 形式の array を渡すことで、フレームグリッドのサイズを変更する。

myTextFrame.gridDimensions([16, 40]);

これで、段数・字間などはそのままに、各段のサイズが 16文字 × 40行 に変更される。どちらか片方だけ変更したい場合は、[0, 55] のようにゼロを使えばそこだけ無変更。

スクリプト

InDesign: フレームグリッドの文字数と行数をget/set — Gist