DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

【InDesign】サンプルスクリプトのMakeGridをリバース・エンジニアリングしました

はじめに

InDesignのサンプルスクリプトの中に、MakeGridという便利なスクリプトがあります。カレンダーを作ろうと久しぶりに使ってみたものの、このスクリプトには以下のような難点がありました。

  • ポイント指定しかできない
  • Undoでスクリプト実行前に戻れない
  • 英語UI
  • ダイアログの設定が都度リセットされる

元のサンプルスクリプトをいじってもよかったのですが、上記を全部解決しようとしたらゼロから開発したほうが楽だと思ったので、今回AIの力をほとんど借りずにフルスクラッチで開発しました。

コードはいつものように、記事末尾に掲載しています。Buy Me A Coffeeも大歓迎です。

使い方

ドキュメントを開き、適当なサイズのオブジェクトを作成します。このオブジェクトが、グリッド作成の基準となる全体サイズになります。このオブジェクトを選択した状態でスクリプトを実行してください。

NOTES

対応している定規単位は、mm、point、歯、pixelです。環境設定の水平方向の定規の単位がそれ以外だと警告が出て動作しません。

実行すると、下図のようなダイアログが出てきます。

MakeGrid設定ダイアログ

必要な情報を入力して、実行ボタンを押してください。

NOTES

列・行については1以上の整数しか受け付けません。列間・行間は負の値が入力可能で、その場合は生成後のオブジェクト同士が重なります。また、このダイアログに入力された値は「実行」ボタン(Enterキー)を押すと保存されます。

「元の体裁と内容を維持する」オプションは、その名の通りで、内部的にはオブジェクトを複製してサイズのみ変えています。
「元のオブジェクトを削除する」オプションもその名の通りで、スクリプト実行前に選択していたオブジェクトを削除するかどうかです。
生成されるグリッド上のオブジェクトはオブジェクトの見た目ではなく座標値基準です。要するに線幅などは含まれずに計算されます*1

以上です。とてもかんたん。

使い途は?

僕自身は、カレンダーを作る際に使いました。決まった範囲の中で7列×6段のテキストフレームが欲しかったのです。これらを連結して1〜31までの数字を流せば、改行の数で日付を簡単にコントロールできます。

コード全文

*1:厳密に言うなら座標の計算にgeometricBoundsを利用しています。