スクリプト面から見たInDesign CS5の新機能(5)PageItem.NameとPageItem.Label

PageItemにNameプロパティがつきました。これはせうぞーさんの言われているとおり(http://d.hatena.ne.jp/seuzo/20100724/1279904204)なんですが、「app.scriptPreferences.versionを一時的に書き換える方法」では本当に一時しのぎでしかないですね。
もともと、itemByNameは、オブジェクトにNameがあればそれを参照し、なければLabelを参照するようになっているので、PageItemにNameプロパティがついた以上、Nameプロパティを参照するのが自然です。どうしてNameプロパティがついたのかは川村さんの言うとおり(http://geocities.yahoo.co.jp/gl/lcs_kawamura/view/20100726/1280101409)、レイヤーパネルのデザインの変更によるものなので、その一環として、今までオブジェクトとして扱われてこなかったEPSTextが追加されたのでしょう。

じゃあ、今までitemByNameを使用していたスクリプトはどうするかというと、ドキュメントに変更を加えるのであれば、変更はいりません。今後CS5で扱いたいドキュメントに対して次のようなスクリプトを実行してやればいいだけです。

var doc=app.activeDocument;
for (i=0;i<doc.allPageItems.length;i++){
    doc.allPageItems[i].name=doc.allPageItems[i].label;
}

どうしてもスクリプトラベルを使いたいという人には、申し訳ありませんが、itemByNameができる以前の環境(InDesign 2.0かな?)に戻ってもらうしかないでしょう。下の例ではallPageItemを使ってますが、範囲が広すぎて時間がかかるかもしれません。Pageで絞るとかオブジェクトの種類で絞るとかしないとね。

var doc=app.activeDocument;
for (i=0;i<doc.allPageItems.length;i++){
    if (doc.allPageItems[i].label == "hoge") break;
}
var targetPageItem = doc.allPageItems[i];

ところでPageItem.Nameってどこで設定するんでしょうね。スクリプト以外で設定する箇所が見当たりません。まあ、スクリプトを使わない人には基本的に不要ですからね。仕方ないので、名前をつけたいPageItemを選択した状態で次のスクリプトを実行しましょうか。
if (app.selection.length == 1) app.selection[0].name=prompt(“オブジェクトの名前を入れてください”);

CS5でいろいろ変わりすぎてなかなかオブジェクトモデルの完成にたどり着きません。ふー

———————————————————-

8月26日 追記

PageItem.Nameはレイヤーパネルでオブジェクト名をダブル(以上)クリックすると変更できます。しつこく連続クリックしないとオブジェクト名がアクティブにならなかったので気がつきませんでした。ここらへんの情報は、InDesignの勉強部屋のStudy Room内、InDesign CS5のNo.3にあります。

『スクリプト面から見たInDesign CS5の新機能(5)PageItem.NameとPageItem.Label』へのコメント

  1. 名前:せうぞー 投稿日:2010/07/26(月) 17:20:26 ID:5f8a30322 返信

    まとめていただいてありがとうございます。
    こちらかも参照させていただきたいと思います。