(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;
文档的值 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
值中减去 zeroPointX
和 zeroPointY
值。
示例 B:
在设置 geometricBounds
时计算 zeroPoint
值可能会变得乏味,尤其是在创建多个页面项目时。通常更简单、更有效的是:
- 获取当前零点
[x,y]
.
- 将 x 和 y 零点都设置为零。
- 然后 create/add 新页面项目。
- 最后,将零点恢复到原来的位置。
以下要点演示了上述方法:
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]
我正在开发 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;
文档的值 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
值中减去 zeroPointX
和 zeroPointY
值。
示例 B:
在设置 geometricBounds
时计算 zeroPoint
值可能会变得乏味,尤其是在创建多个页面项目时。通常更简单、更有效的是:
- 获取当前零点
[x,y]
. - 将 x 和 y 零点都设置为零。
- 然后 create/add 新页面项目。
- 最后,将零点恢复到原来的位置。
以下要点演示了上述方法:
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]