DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

parentPageのparent

ここんとこレジュメのスクリプトばっかりで遊んでないので、ちょっぴりハマったことをメモ。
ドキュメント中のテキストフレーム内の文字を選択した状態で、そのテキストフレームと同じページに新たにオブジェクトを作りたかった。

var myDoc = app.activeDocument;
var mySel = myDoc.selection[0];
var myIndex = mySel.parentTextFrames[0].parentPage.index;
myDoc.pages[myIndex].textFrames.add();

見開きドキュメントの3ページ目以降で実行すると、1ページ目か2ページ目にできてしまって、肝心のオブジェクトを選択しているページにフレームを作ってくれません。おっかしーなー?と思ったわけです。
調べればなんてことなくて、parentPageの親、つまりparentPage.parentはスプレッドオブジェクトなんですね。だからparentPage.indexを取得すると、そのスプレッドの何ページ目かを取得するだけで、ドキュメント全体の何ページ目かは取得できないのでした。
で、よくよく考えたら別にparentPageでページオブジェクトを取得できたんなら、わざわざindexを取得しないでもそのままページオブジェクトとして使えばいいよね??という、割とどうでもいいことで悩まされていたのでした…。

var myDoc = app.activeDocument;
var mySel = myDoc.selection[0];
var myPage = mySel.parentTextFrames[0].parentPage;
myPage.textFrames.add();

これで選択しているオブジェクトと同じページにテキストフレームが作れました。

オブジェクトのparent大事。