InDesign extendScript:如何转换整个选择?

时间:2015-05-21 04:12:07

标签: javascript selection adobe-indesign extendscript

通过使用简单数组app.selection[x],您可以将变换应用于选择中的任何对象,独立。但是,如何将变换应用于整个选择?

例如:在InDesign中,我可以选择两个并排的对象并水平翻转它们,使它们切换位置并翻转。

InDesign Screenshot: Example 1

在脚本中,我可以定位选择中的每个对象,但它们不会切换位置;他们将留在同一个地方并翻转。

for ( var x = 0; x < app.selection.length; x++ ){
    app.selection[x].absoluteFlip = Flip.HORIZONTAL;
}

InDesign Screenshot: Example 2

我可以对选择进行分组,应用转换,然后在完成后取消组合,但这似乎是不必要的批量,可能会减慢代码速度。我可以在InDesign中手动轻松完成,因此应该遵循以某种方式访问​​app.selection作为单个对象而不是数组。这样的对象存在吗?

2 个答案:

答案 0 :(得分:1)

不是一个真正的解决方案,但值得注意的是我并不认为absoluteFlip是正在执行的动作,而是一个指示该项目是否已被翻转的状态。它是可写的,所以你可以设置状态,但我认为使用菜单翻转时发生的是flipItem:http://jongware.mit.edu/idcs6js/pc_PageItem.html#flipItem, 你可以设置&#34;周围&#34;坐标。 现在获取选择框的原点并不是出于某种原因(或者可能是但我不知道如何),但你可以使用第一个对象坐标设置原点,这样你就可以翻转它根据选择的顺序围绕不同的坐标。或者您可以对数组进行排序以找到最左侧的坐标(或任何需要的坐标),如下所示:

    var selection_array = app.selection;
    selection_array.sort(function(a, b){return a.visibleBounds[1]-b.visibleBounds[1]})
    var flip_origin = [selection_array[0].visibleBounds[1],selection_array[0].visibleBounds[0]]
    for(i=0;i<app.selection.length;i++){
        app.selection[i].flipItem(Flip.HORIZONTAL, flip_origin);
    }

不确定它比分组和取消分组更容易或更快。

答案 1 :(得分:0)

考虑调整大小。它有一个&#34;个人/全球&#34;参数: void resize(in:vary,from:vary,by:ResizeMethods,values:array of vary [,resizeIndividually:bool = true] [,considerationRulerUnits:bool = false]) 调整页面项目的大小。