在InDesign CS6中选择组内的textFrames

时间:2013-07-16 19:30:16

标签: javascript adobe-indesign extendscript

类似于我之前在页面上基于geometryBounds或部分名称查找textFrame的问题,我现在遇到了查找textFrames的问题,如果它们在组内。如果我使用所有textFrames的数组,例如:

var textFramesArray = document.textFrames.everyItem().getElements();

它将找到组内的任何textFrame。如果它在一个组中,我怎样才能弄清楚如何引用textFrame?即使该组必须取消分组,这很好,但我甚至无法弄清楚如何在页面上找到组!

3 个答案:

答案 0 :(得分:7)

页面上的群组是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);

答案 1 :(得分:2)

试试这个:

// 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");

答案 2 :(得分:1)

您的任务是获取图层或文档中的所有文本框架。这些文本框是否在一个组中。这是通过allPageItems的属性完成的。例如,使用它: -

var items=app.activeDocument.allPageItems;

这将为您提供项目和组内的所有文本框架。现在你可以进行任何操作。您可以检查调试控制台上的items,它将提供所有类型的对象。然后您可以检查文本框架

items[i].constructor.name =='TextFrame'

现在您可以将每个对象存储在类型数组中。