2016-07-13 4 views
0

をtextframesを調整して配布:を選択し、私は以下のないスクリプトを書きたいInDesignで[ExtendScriptの]

  • は選択水平
  • が水平
  • をフレームを配布し、いくつかのtextframesに
  • センターを選択
  • ルーチンをいくつかのページで実行する必要があります

私の最初の問題は、 ctはロックされていないレイヤーからのテキストフレームです。ロックされたレイヤーでもすべてのテキストフレームが選択されたいくつかのソリューションが見つかりました。 これまでに私のロックされていないレイヤー(app.menuActions.item("$ID/Select &All").invoke();)からテキストフレームを選択する唯一の解決策は、後で作業(調整、配布)できるオブジェクトを提供していません。

私の要件を解決する方法はありますか?


編集: 私の最後の試みは、この(テスト中に単一のページのために、私はいくつかのページのためにループを使用していなかった)ように見えた:一般的に、選択はあるものです

// 'allPageItems' erfasst alle Rahmen, zusätzlich Gruppen und Bilder 
var allObjects = app.activeDocument.layoutWindows[0].activeSpread.allPageItems; 
// eine Schleife durch die Objekte 
for (var n=0; n<allObjects.length; n++) { 
    var curObject = allObjects[n]; 
    // prüfen, ob Textrahmen 
    if (curObject.constructor.name == "TextFrame") { 
     // verankerte Textrahmen ausschliessen 
     if (curObject.parent != "[object Character]") { 
      // zur Auswahl hinzufügen 
      curObject.select(SelectionOptions.ADD_TO); 
     } 
    } 
} 
+0

ようこそ!あなたは何を試しましたか? :) – GibboK

+1

私はすでに@GibboKを試したいくつかのコードを追加 – yaksey

答えて

2

UIインタラクションを意図したもので、スクリプト作成用ではありません。したがって、スクリプト内のすべての選択項目を処理する必要はなく、配列内のオブジェクトとしてtextFramesを収集してから、他の処理を行うことができます。

これは動作するはずです:

#target indesign 

var doc = app.activeDocument; 
var curSpread = doc.layoutWindows[0].activeSpread; 
var spreadItems = curSpread.allPageItems; 

var distObjects = []; 

// collect all relevant objects in distObjects 
for (var i = 0; i < spreadItems.length; i += 1) { 
    var si = spreadItems[i]; 

    // skip if itemLayer is locked 
    if (si.itemLayer.locked) continue; 

    // skip if item is not a textFrame 
    if (!(si instanceof TextFrame)) continue; 

    // skip if item is anchored 
    if (si.parent.constructor.name === "Character") continue; 

    distObjects.push(si); 
}; 

// group all collected objects to center them, then ungroup 
var distGroup = curSpread.groups.add(distObjects); 
doc.align([distGroup], AlignOptions.HORIZONTAL_CENTERS, AlignDistributeBounds.SPREAD_BOUNDS); 
distGroup.ungroup(); 

// distribute all objects horizontally 
doc.distribute(distObjects, DistributeOptions.HORIZONTAL_CENTERS, AlignDistributeBounds.ITEM_BOUNDS); 

注:これは(前に私は信じてCC2014への)古いIDのバージョンで使用されている場合は、グループ解除した後、すべてのpageItemsは同じ層に留まります。元のレイヤーに戻す機能は最近導入されたばかりです。 InDesignの古いバージョンのソリューションが必要な場合は、見つかったオブジェクトのグループの境界を計算し、すべてを1つずつオフセットする必要があります。その結果、「選択」全体が中央に配置されます。

+0

魅力のように動作します、ありがとう!また、スクリプトでの選択の仕組みについての深い情報をお寄せいただきありがとうございます。 – yaksey

関連する問題