【发布时间】:2019-06-03 07:54:06
【问题描述】:
InDesign 中是否有使用 Javascript 搜索文档中重叠的任何文本框架的方法?我一直在查看具有 TextFrame 的所有属性的文档,但找不到任何可以判断是否有任何重叠框的东西。
我不知道 Javascript,但知道 Ruby,所以我了解它。
【问题讨论】:
InDesign 中是否有使用 Javascript 搜索文档中重叠的任何文本框架的方法?我一直在查看具有 TextFrame 的所有属性的文档,但找不到任何可以判断是否有任何重叠框的东西。
我不知道 Javascript,但知道 Ruby,所以我了解它。
【问题讨论】:
每个页面对象都有一个只读属性textFrames,页面上有所有的textFrames。
每个 textFrame 都有一个方法visibleBounds,它会以[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 ();
}
}
}
}
【讨论】:
rulerOrigin,而不是ruleOrigin。