![](/img/trans.png)
[英]How to select all textframes in document, and retrieve the text in adobe indesign
[英]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.