テキストフレームの連結と解除

ExtendScriptでInDesignのテキストフレームの連結・解除をする テキストフレーム

InDesignのテキストフレームを、ExtendScriptで連結・解除するコマンドの紹介です。

「連結する」「解除する」というコトバから想像すると、メソッドを使うような気がしますが、そうではありません。

サンプルドキュメントの準備

今回のコードサンプルの実行には、アクティブドキュメントを使います。
新規ドキュメントを作って、開いておきます。

それ以外は何の準備もしていません。

コードサンプル

新規に、テキストフレームを3つ作成して左から順に並べ、左から順に連結します。

#target indesign
var objDoc = app.activeDocument;

// テキストフレームを3つ作成
var objTxtFrm01 = objDoc.textFrames.add();
var objTxtFrm02 = objDoc.textFrames.add();
var objTxtFrm03 = objDoc.textFrames.add();
// 位置と大きさを変更
objTxtFrm01.visibleBounds = ["50mm","30mm","100mm","80mm"];
objTxtFrm02.visibleBounds = ["50mm","90mm","100mm","140mm"];
objTxtFrm03.visibleBounds = ["50mm","150mm","100mm","200mm"];
// 各テキストフレームに文字を入力
objTxtFrm01.contents = "A";
objTxtFrm02.contents = "B";
objTxtFrm03.contents = "C";

// 1,2,3の順でテキストフレームを連結
objTxtFrm01.nextTextFrame = objTxtFrm02;
objTxtFrm02.nextTextFrame = objTxtFrm03;

ここでは、とりあえずテキストフレームを add() の引数なしで作成したあとに、位置と大きさを変更しています。

実行結果

サンプルコードの中で、実際に連結しているのは最後の2行です。

objTxtFrm01.nextTextFrame = objTxtFrm02;
objTxtFrm02.nextTextFrame = objTxtFrm03;

まず、1番目のテキストフレームのプロパティ nextTextFrame に2番目のテキストフレームを代入します。

次に、2番目と3番目のテキストフレームの連結も同様に、nextTextFrame を使って連結しています。

「A」「B」「C」の文字は、サンプルコードでは各テキストフレームに1文字ずつ入力しましたが、連結されたことで先頭のテキストフレームに入りました。

テキストフレームの連結にかかわるプロパティは、次の4つがあります。

  • startTextFrame:先頭のテキストフレーム
  • endTextFrame:最後のテキストフレーム
  • previousTextFrame:前のテキストフレーム
  • nextTextFrame:次のテキストフレーム

連結を解除するときは、例えば次のコードのように null を代入します。

objTxtFrm01.nextTextFrame = null;

こうすると、1番目と2番目の連結が切れて、1番目のテキストフレームだけが単独の状態になります。

コメント

タイトルとURLをコピーしました