(JavaScript/CEP) 是否可以在 InDesign 上获取我的页面来源?

(JavaScript/CEP) Is it possible to get the origin of my page on InDesign?

我正在开发 InDesign 插件,我想知道是否可以获取我的页面来源?

我在想这样的事情:

var origin = app.activeDocument.pages[0].getOrigin();

提前感谢您的帮助!

编辑:

我会更准确地解释我的问题:

我在这里必须完成的任务是使用通过 API 调用接收到的坐标来显示形状。

这有一个问题:用户可以在 InDesign 上编辑原点 (x, y)。如果它改变了板的原点,形状将不再位于页面上正常放置的位置。

此处为红色,表示形状正确。

蓝色,因为我修改了棋盘的原点,所以它们不在正确的位置。 所以我需要恢复页面的来源,以便能够计算出我的板的来源和我的页面的来源之间的差异。这将使我的形状始终位于正确的位置。

rulerOrigin(如果你是这个意思的话)是一个文档整体的一个特征。这不是单个页面的功能。

例如,您可以这样获取和查看当前文档的rulerOrigin

alert(app.activeDocument.viewPreferences.rulerOrigin);

您可以用同样的方式更改此功能:

app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.SPREAD_ORIGIN;

https://documentation.help/InDesign-CS5/pe_RulerOrigin.html

文档的值 zeroPoint 属性 是两个数字的数组。

  • 索引0处的数字是X轴上的零点
  • 索引1处的数字是Y轴上的零点。

例如:

app.activeDocument.zeroPoint;

对新创建的文档产生 [0,0],即对于其零点未从其默认位置更改的文档。


用法示例:

创建新页面项目时,有必要计算 zeroPoint 值以确保将其放置在所需位置。

示例 A:

假设我们要在文档的第一页上添加一个新的方形文本框,无论当前零点位置如何,它始终位于页面的左上角。

在这种情况下,我们的代码将类似于以下内容:

var doc = app.activeDocument;

// 1. Obtain the zero point on the x axis.
var zeroPointX = doc.zeroPoint[0];

// 2. Obtain the zero point on the y axis.
var zeroPointY = doc.zeroPoint[1];

// 3. Create a new text frame that is always positioned at the top left corner
//    of the first page, regardless of the zero point position.
doc.pages.item(0).textFrames.add({
  geometricBounds: [
    0 - zeroPointY,
    0 - zeroPointX,
    50 - zeroPointY,
    50 - zeroPointX
  ],
  contents: "Lorem ipsum dolore"
});

如您所见,在前面的示例中,我们在为新文本框架定义它们时相应地从所需的 geometricBounds 值中减去 zeroPointXzeroPointY 值。

示例 B:

在设置 geometricBounds 时计算 zeroPoint 值可能会变得乏味,尤其是在创建多个页面项目时。通常更简单、更有效的是:

  1. 获取当前零点[x,y].
  2. 将 x 和 y 零点都设置为零。
  3. 然后 create/add 新页面项目。
  4. 最后,将零点恢复到原来的位置。

以下要点演示了上述方法:

var doc = app.activeDocument;

// 1. Obtain the original zero point.
var originalZeroPoints = doc.zeroPoint;

// 2. Set x and y zero points both to zero.
doc.zeroPoint = [0,0];

// 3. Create a new text frame that is always positioned at the top left corner
//    of the first page, regardless of the zero point position.
doc.pages.item(0).textFrames.add({
  geometricBounds: [0, 0, 50, 50],
  contents: "Lorem ipsum dolore"
});

// 4. Revert the zero point to original position.
doc.zeroPoint = originalZeroPoints;

如您所见,在前面的示例中,它产生与 “示例 A” 相同的结果,但是我们在设置 [=18= 时不进行任何计算],我们只是根据需要定义我们的值,即 geometricBounds: [0, 0, 50, 50]