文字列関連オブジェクトは以下のような図で表すことができます。正確なオブジェクト相関図ではありませんが、何をどこから取得・変更できるのかがわかるようになっています。

この後の解説を読みながら、適宜この図を見直してもらうと、それぞれの関係性が理解できると思います。

 

 

<概念経由でのアクセス>

 

InDesignは文字列をストーリーという単位で管理しています。ストーリーとはテキストフレームによって区切られたひとつながりの文字列のことで、リンクされたテキストフレームの文字列はひとつのストーリーとしてみなされます。

例えば以下のようなドキュメントは、3つのストーリーによって構成されています。

 

ドキュメントにあるストーリーは、以下のように配列として取得します。

var s= app.activeDocument.stories[0]; //アクティブドキュメントにある1つ目のストーリー

ただし取得した配列内の順序は、正確に予測することはできません(おそらく作成順)。

 

ストーリーにある文字列はcontentsプロパティから取得します。

var s= app.activeDocument.stories[0]; //アクティブドキュメントにある1つ目のストーリー
var t= s.contents; //文字列を取り出す
$.writeln (t);

なお、これで取得できるのは属性を持たないプレーンな文字列です(属性を持った文字列の取得方法は後述)。

 

<実体経由でのアクセス>

 

ドキュメント上で文字列が実体化されるためには、テキストフレームなどのコンテナオブジェクトが必要です。以下のオブジェクトが文字列を直接収納しています。

 

コンテナオブジェクトにある文字列は、ストーリーと同様にcontentsプロパティから取得します。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var t= selObj.contents; //文字列を取り出す
$.writeln (t);

これもストーリーと同様に、取得できるのは属性を持たないプレーンな文字列で、それをcontentsプロパティから取得しています。

 

連結されている複数のテキストフレームのひとつから、そこに流れているすべての文字列(=ストーリー)を取得したい場合は、parentStoryプロパティを使ってアクセスします。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var t= selObj.parentStory; //ストーリーを取り出す
$.writeln (t.contents);

なお、parentStory(親ストーリー)という名前が付いていますが、先の図で示した通り、ストーリーとテキストフレームは親子関係になっているわけではありません。グラフィックフレームと画像の関係のように、ストーリーが実体化するためにコンテナオブジェクトへリンクされているイメージです。

 

<属性を持った文字列へのアクセス>

 

ストーリーやコンテナオブジェクトから、文字の大きさやフォントの設定などの属性を含んだ文字列は、textsプロパティからTextオブジェクトを取得します。

var s= app.activeDocument.stories[0]; //アクティブドキュメントにある1つ目のストーリー
var t= s.texts[0]; //属性付き文字列を取り出す
$.writeln (t.contents);

以下の例では選択されたテキストフレームにあるTextオブジェクトを取得します。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var t= selObj.texts[0]; //属性付きテキストを取り出す
$.writeln (t.contents);

なお、Textオブジェクトは常に配列として返ります。ストーリーやテキストフレームのように、配列の内容は「1つしかない」ことがあきらかな場合はtexts[0]として取得します。

 

上の例ではテキストフレームから無条件に取得しているので、結果的にその中にあるすべてのTextオブジェクトを取得します。

例えば以下のように、段落(paragraphs)という抽出範囲を設定すれば、その条件に合ったTextオブジェクトを取得することができます。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var t= selObj.paragraphs[1].texts[0]; //テキストフレーム内にある2つ目の段落のテキスト
$.writeln (t.contents);

 

何らかの方法で取得したTextオブジェクトから、それが含まれるストーリーやテキストフレームを知りたいときは、parentStoryプロパティ、もしくはparentTextFramesプロパティから取得することができます。

なお、テキストフレームは連結されて存在することがあるため、parentTextFramesプロパティで取得するテキストフレームは常に配列として返ります。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
$.writeln ('textFrame ID= '+selObj.id); //テキストフレームの固有IDを取得
var tObj= selObj.paragraphs[1].texts[0]; //textオブジェクトを取り出す
var xObj= tObj.parentTextFrames[0]; //textオブジェクトから親テキストフレームを取得
$.writeln ('get ID= '+xObj.id); //同じIDが表示されることを確認

 

※Textオブジェクトの取り回しについては、これ以降の解説を参照

 

 

Joomla templates by a4joomla