InDesign javascript 查找重叠文本框

InDesign javascript to find overlapping textframes

在 InDesign 中是否有使用 Javascript 来搜索文档中重叠的任何文本框架的方法?我一直在查看包含 TextFrame 的所有属性的文档,但找不到任何可以判断是否存在重叠框的信息。
我不知道 Javascript 但知道 Ruby 所以我了解其中的一些内容。

每个 Page 对象都有一个只读属性 textFrames,页面上有所有 textFrames。 每个textFrame都有一个方法visibleBounds,它会return一个[x1,y1,x2,y2]形式的数组,所以你可以得到这个文本框的几何边界。

因此您需要遍历页面的所有 textFrame,获取每个 textFrame 的边界,然后您必须检查它们是否相互重叠。

这是一个简单的代码,用于查找重叠的文本框。它遍历活动文档中的所有跨页并暂停以报告重叠。看看吧。

app.activeDocument.viewPreferences.rulerOrigin= RulerOrigin.SPREAD_ORIGIN;
//If you are going to work with pages, not spreads, change the line above to PAGE_ORIGIN;
for (a = 0; a < app.activeDocument.spreads.length; a ++) {
    var pg = app.activeDocument.spreads [a];
    for (b = 0 ; b < pg.textFrames.length; b ++) {
        var r1 = pg.textFrames [b];
        for (c = 0 ; c < pg.textFrames.length; c ++) {
            var r2 = pg.textFrames [c];
            var gb1 = r1.geometricBounds;
            var gb2 = r2.geometricBounds;

            if ((r1 != r2) &&
                (gb1 [0] > gb2 [0] && gb1 [0] < gb2 [2] && gb1 [1] > gb2 [1] && gb1 [1] < gb2 [3]) ||
                (gb1 [2] > gb2 [0] && gb1 [2] < gb2 [2] && gb1 [1] > gb2 [1] && gb1 [1] < gb2 [3]) ||
                (gb1 [0] > gb2 [0] && gb1 [0] < gb2 [2] && gb1 [3] > gb2 [1] && gb1 [3] < gb2 [3]) ||
                (gb1 [2] > gb2 [0] && gb1 [2] < gb2 [2] && gb1 [3] > gb2 [1] && gb1 [3] < gb2 [3])) {
                r1.select ();
                var cnf = confirm ("Text frames overlap. Continue searching?", true, "Overlapping text frames");
                if (!cnf)
                    exit ();
            }
        }
    }
}