簡體   English   中英

在InDesign [ExtendScript]中選擇,調整和分發文本框架

[英]Select, adjust and distribute textframes in InDesign [ExtendScript]

我想編寫一個執行以下操作的腳本:

  • 選擇一些文本框
  • 將選擇水平居中
  • 水平分布框架
  • 整個例程必須在幾頁上完成

我的第一個問題是,我只想從未鎖定的圖層中選擇文本框架。 我發現了幾種解決方案,其中選擇了所有文本框,即使在鎖定的圖層上也是如此。 到目前為止,我發現的唯一解決方案是從未鎖定的圖層中選擇app.menuActions.item("$ID/Select &All").invoke();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); 
        }   
    } 
} 

通常,選擇是用於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);

注意:如果將它與舊版ID版本(我相信CC2014之前)一起使用,則在取消分組后,所有pageItem將保留在同一層上。 他們遷移回原始圖層的功能僅在最近才引入。 如果您需要舊版InDesign的解決方案,則需要計算找到的對象組的邊界,然后將它們全部一一偏移,以便使整個“選擇”都可以居中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM