【问题标题】:(JavaScript/CEP) Is it possible to get the origin of my page on InDesign?(JavaScript/CEP) 是否可以在 InDesign 上获取我的页面的来源?
【发布时间】:2021-11-19 17:08:17
【问题描述】:

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

我在想这样的事情:

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

提前感谢您的帮助!

编辑:

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

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

这有一个问题:用户可以在 InDesign 上编辑原点 (x, y)。如果它改变了棋盘的原点,那么这些形状就不再会出现在它们应该在页面上正常放置的位置。

这里是红色的,形状在正确的位置。

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

【问题讨论】:

    标签: javascript adobe adobe-indesign extendscript adobe-extension


    【解决方案1】:

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

    例如,您可以通过这种方式获取并查看当前文档的rulerOrigin

    alert(app.activeDocument.viewPreferences.rulerOrigin);
    

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

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

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

    【讨论】:

    • 我编辑了我的问题,因为我不够清楚。我仍然接受你给我的信息。谢谢!
    【解决方案2】:

    文档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"
    });
    

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

    示例 B:

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

    1. 获取当前零点[x,y]
    2. 将 x 和 y 零点都设置为零。
    3. 然后创建/添加新的页面项目。
    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” 相同的结果,但是在设置 geometricBounds 时我们不进行任何计算,而是简单地定义我们的根据需要设置值,即geometricBounds: [0, 0, 50, 50]

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2023-03-28
      • 2021-11-12
      • 2022-01-13
      • 2019-09-06
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多