>

【InDesign】アンカーつきオブジェクトをスクリプトで取得


アンカー付きオブジェクトを取得するにあたって困ったこと

 アンカー付きオブジェクトは、ドキュメントからallPageItemsやpageItemsで取得することができません。

 あくまでも、「ドキュメントに置いてあるテキストフレームに挿入したオブジェクトを取得」というアンカー付きオブジェクトを入れる際の手順を、コードを書くときにも意識する必要がありました。

 ここでハマること幾星霜…

テキストフレームに挿入したアンカー付きオブジェクトを拾う場合。 選択オブジェクトの中のpageItemを取得できるようにコードを書く必要がある。
テキストフレームに挿入したアンカー付きオブジェクトを拾う場合。 選択オブジェクトの中のpageItemを取得できるようにコードを書く必要がある。
テキストフレームに挿入したアンカー付きオブジェクトに、 更にアンカー付きオブジェクトが挿入されている場合。ちょっと面倒
テキストフレームに挿入したアンカー付きオブジェクトに、 更にアンカー付きオブジェクトが挿入されている場合。ちょっと面倒

実践:選択したテキストフレーム内の[カスタム]で配置されているアンカー付きオブジェクト数を取得

var sel=doc.selection[0];
var ancs=[];
for(var i = 0;i < sel.pageItems.length;i++){
            if(sel.pageItems[i].anchoredObjectSettings.anchoredPosition == AnchorPosition.anchored){
                ancs.push(sel.pageItems[i]) ;
                }
}
alert(ancs.length);
/*アンカー付きオブジェクトの「親文字からの位置」
sel.pageItems[i].anchoredObjectSettings.anchoredPosition
    AnchorPosition.INLINE_POSITION インライン
    AnchorPosition.anchored カスタム
    AnchorPosition.ABOVE_LINE 行の上
*/

 こちらのスクリプトをテキストフレームを選択した状態で実行すると、[アンカー付きオブジェクトオプション]で、[親文字からの位置]が[カスタム]になっているオブジェクト数が通知されます。

 試しにこちらのページで実行すると、「0」がアラートされました。というのも、このテキストフレームでは[カスタム]で挿入しているアンカー付きオブジェクトが無いためです。

では、6行目の

if(sel.pageItems[i].anchoredObjectSettings.anchoredPosition == AnchorPosition.anchored){ `

を、 

if(sel.pageItems[i].anchoredObjectSettings.anchoredPosition == AnchorPosition.INLINE_POSITION){

に変更して実行してみます。すると、「3」が通知されます。このテキストフレームには、インラインで挿入されたアンカー付きオブジェクトが3つあるということです。

 スクリプトでアンカー付きオブジェクトを掴めればあとはこっちのもので、「カスタム」になっているアンカー付きオブジェクトの画像を一括置換、キャプションをいっぺんに差し替える、などができます。

               

広告

コメントする

★マークのある項目が必須項目です。メールアドレスは公開されません。

CAPTCHA


内容を確認して、送信してください(プレビューはされません)。コメント内では<strong>、<code>、<em>のタグが使えます。

こちらもいかが

新しい投稿

スマホ落としちゃった
落としちゃった

過去の投稿

二次創作
泳ごうぜ