与我之前基于其几何边界或部分名称在页面上查找 textFrame 的问题类似,我现在遇到了在组内查找 textFrame 的问题。如果我使用所有 textFrames 的数组,例如:
var textFramesArray = document.textFrames.everyItem().getElements();
它不会找到组内的任何文本框。如果 textFrame 在组内,我如何弄清楚如何引用它?即使必须取消分组,也没关系,但我什至无法弄清楚如何在页面上找到组!
与我之前基于其几何边界或部分名称在页面上查找 textFrame 的问题类似,我现在遇到了在组内查找 textFrame 的问题。如果我使用所有 textFrames 的数组,例如:
var textFramesArray = document.textFrames.everyItem().getElements();
它不会找到组内的任何文本框。如果 textFrame 在组内,我如何弄清楚如何引用它?即使必须取消分组,也没关系,但我什至无法弄清楚如何在页面上找到组!
页面上的组是page.groups
......但无论如何你都不需要这个。Fabian 的回答很好,但它没有考虑分组 - 也没有剪贴蒙版,也没有表格和脚注(等)内的文本框。
这是另一种方法:allPageItems
几乎可以保证返回所有页面项目,各种类型和说服力,内部组或其他框架或诸如此类。您可以依次检查和处理它们中的每一个,或者构建一个文本框架数组以在闲暇时使用:
allframes = app.activeDocument.allPageItems;
textframes = [];
for (i=0; i<allframes.length; i++)
{
if (allframes[i] instanceof TextFrame)
textframes.push(allframes[i]);
}
alert (textframes.length);
尝试这个:
// this script needs:
// - a document with one page
// - some groups with textframes in it on the first page
var pg = app.activeDocument.pages[0];
var groups = pg.groups;
var tf_ingroup_counter = 0;
for(var g = 0; g < groups.length;g++){
var grp = groups[g];
for(var t = 0; t < grp.textFrames.length;t++){
var tf = grp.textFrames[t];
if(tf instanceof TextFrame){
tf_ingroup_counter++;
}
}
}
alert("I found on page " + pg.name +"\n" + pg.textFrames.length
+" textframes\nOh and there are also "
+tf_ingroup_counter+ " hidden in groups");
您的任务是获取图层或文档中的所有文本框。这些文本框架是否在一个组中。这是通过 的属性完成的allPageItems
。例如使用这个: -
var items=app.activeDocument.allPageItems;
这将为您提供项目中和组内的所有文本框架。现在您可以进行任何操作。您可以items
在调试控制台上检查,它将提供所有类型的对象。然后您可以检查文本框
items[i].constructor.name =='TextFrame'
现在您可以将每个对象存储在类型数组中。