スクリプト面から見た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にあります。