※目的のテキストオブジェクトへのアクセス方法は、段落や行など、目的に合わせた文字列の取得を参照。

※ここではすべてテキストフレームを親オブジェクトとしていますが、ストーリーからも同じ方法でアクセスすることができます。(ストーリーについてはテキスト関連・概要を参照)。

 

<文字列の挿入>

 

文字列を挿入するには、挿入位置をinsertionPointsプロパティで取得し、そこへテキストを追加します。

これはInDesignのUIで、カーソルを入れて文字列を流し込むのと同じ動作になります。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var insPos= selObj.insertionPoints[2]; //先頭から2文字目の後ろ
insPos.contents= '挿入文字';

 

<文字列の削除>

 

文字列の削除は、削除したいTextオブジェクトを取得し、remove関数を使って削除します。

以下の例ではテキストフレームにある最初の段落を削除しています。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var p= selObj.paragraphs[0]; //テキストフレームにある最初の段落
p.remove(); //削除

 

<文字列の移動>

 

文字列の移動は、移動したいTextオブジェクトを取得し、move関数を使って移動します。第1引数にはLocationOptions定数、第2引数には基準となるオブジェクトを指定します。

例えば「最初の段落」を「3つ目の段落」の「後」に移動したい場合、以下のようになります。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var prA= selObj.paragraphs[0].texts[0]; //テキストフレームにある最初の段落
var prB= selObj.paragraphs[2].texts[0]; //テキストフレームにある3つ目の段落
prA.move(LocationOptions.AFTER, prB); //LocationOptions.AFTER=後

 

以下の例では「10文字目~20文字目」を「先頭」に移動します。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var chs= selObj.characters.itemByRange(9, 19); //10文字目~20文字目
var insPos= selObj.insertionPoints[0]; //文字列の先頭
chs.move(LocationOptions.AFTER, insPos); //LocationOptions.AFTER=前(この場合、前でも後でもよい)

 

なお、これらの第2引数には別なテキストフレームを指定することもできます。

 

<文字列の置き換え>

 

既存の文字列を別なものへ置き換えるときは注意が必要です。

例えば、以下のようなテキストフレームを、その下にあるスクリプトで文字を置き換えてみます。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
selObj.contents= '新しい秩序の創造'; //文字列のみを入れ替える

結果は以下のように、元の属性が残ったまま文字だけが置き換わってしまいます。

 

文字列を置き換える場合は、置き換えた文字列に対し、改めてしかるべき書式を設定しなければなりません(参照:各種属性の適用)。

 

なお、InDesignのUIによる「選択&コピー」と同じ挙動を期待するのであれば、テキスト(間の属性含む)を削除後、新たなテキストを流し込むという方法があります。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
selObj.texts[0].remove(); //テキストを削除
selObj.contents= '新しい秩序の創造'; //文字列のみを入れ替える

 

 

Joomla templates by a4joomla