转换操作

通过 Google 幻灯片 API,您可以操控幻灯片的位置、大小和方向, PageElement (文本框、图片、表格和基本形状),同时保持线条 并保留交点和平行线这些函数称为仿射函数, 转换。此处的示例显示了一些常见的页面元素转换 使用 presentations.batchUpdate 方法。

这些示例使用以下变量:

  • PRESENTATION_ID - 表示您在哪里提供 演示文稿 ID。您可以 从演示文稿网址中发现此 ID 的值。
  • PAGE_ID - 表示您提供 page 对象的位置 ID。您可以使用 从网址或使用 API 读取请求获取此值。
  • PAGE_ELEMENT_ID - 表示您提供网页的位置 元素对象 ID。您 您可以为您创建的元素指定此 ID(一些 限制) 也可以让幻灯片 API 自动创建一个元素 ID 可以通过 API 读取请求进行检索。

这些示例以 HTTP 请求的形式呈现,与语言无关。学习内容 如何使用 Google API 实现不同语言的批量更新 请参阅添加形状和 文本

箭头形状示例

对于下面的示例,我们假设存在一个箭头形状页面示例 元素及其大小和转换数据(可使用 presentations.pages.get 方法请求)。示例形状使用 unit EMU(英制单位)和 pt (点)。

{
  "objectId": PAGE_ELEMENT_ID,
  "size": {
    "width": {
      "magnitude": 3000000,
      "unit": "EMU"
    },
    "height": {
      "magnitude": 3000000,
      "unit": "EMU"
    }
  },
  "transform": {
    "scaleX": 0.3,
    "scaleY": 0.12,
    "shearX": 0,
    "shearY": 0,
    "translateX": 2000000,
    "translateY":  550000,
    "unit": "EMU"
  },
  "shape": {
    "shapeType": "RIGHT_ARROW"
  }
}

将元素与另一个元素对齐

以下 presentations.batchUpdate 代码示例展示了如何使用 CreateShapeRequest 方法在正确的位置创建新形状,这些形状与 页面上的箭头形状示例。在这两种情况下,X 和 Y 新形状左上角的坐标。

第一个请求创建一个与左侧对齐的 100x50 pt 矩形 箭头形状的边框,但位置为 50 pt (50 * 12,700 = 635,000 EMU) 箭头的顶边下方新矩形的 X 坐标应为 与箭头的 X 坐标相同,以保持其左边框对齐。Y 坐标等于箭头的 Y 坐标加上 50 pt,因为 距离是从箭头顶部测量的。矩形的坐标为 因此:

x" = 2000000 EMU
y" = 550000 + (50 * 12700) = 1185000 EMU

第二个请求将创建一个 40 pt 宽的圆形, 但位置是距离 100 pt (1,270,000 EMU) 到 100 pt (1,270,000 EMU) 之间的距离 箭头右侧边缘右侧圆的 X 坐标是 箭头的 X 坐标、箭头宽度和 100 pt。强制执行中心线 新圆形的对齐方式需要同时考虑两边的高度 箭头和圆圈。圆形的 Y 坐标是箭头的 Y 坐标 再加上箭头高度的一半,再减去圆圈高度的一半。在这两种情况下, 还必须考虑与箭头相关的缩放系数 因为它们会影响箭头的呈现宽度和高度。圆圈的 坐标为:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU
y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

以下是将元素与另一个元素对齐的请求协议:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "createShape": {
        "shapeType": "RECTANGLE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 100,
              "unit": "PT"
            },
            "height": {
              "magnitude": 50,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 2000000,
            "translateY": 1185000,
            "unit": "EMU"
          }
        }
      }
    },
    {
      "createShape": {
        "shapeType": "ELLIPSE",
        "elementProperties": {
          "pageObjectId": PAGE_ID,
          "size": {
            "width": {
              "magnitude": 40,
              "unit": "PT"
            },
            "height": {
              "magnitude": 40,
              "unit": "PT"
            }
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 4170000,
            "translateY":  476000,
            "unit": "EMU"
          }
        }
      }
    }
  ]
}

移动元素

以下 presentations.batchUpdate 代码示例展示了如何使用 UpdatePageElementTransformRequest 方法将示例箭头形状页面元素翻译为 两种不同方式

该批次中的第一个请求将箭头移动到 (X,Y) = (2000000, 150000) EMU 坐标(使用绝对转换applyMode)。 批次中的第二个请求从此处移动箭头,这次是 40,000 EMU 向右移动 35,000 EMU(使用相对平移 applyMode)。 使用的 transformation1 矩阵 构造以避免改变元素的尺寸和方向。

执行完两个请求后,箭头的左上角停在 (X,Y) 处 = (2040000, 115000) EMU 坐标。

以下是移动元素的请求协议:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "ABSOLUTE",
        "transform": {
            "scaleX": 0.3,
            "scaleY": 0.12,
            "translateX": 2000000,
            "translateY":  150000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX":  40000,
            "translateY": -35000,
            "unit": "EMU"
        }
      }
    }
  ]
}

反射元素

以下 presentations.batchUpdate 代码示例展示了如何使用 UpdatePageElementTransformRequest 方法以反映示例箭头形状页面元素 不改变广告素材在网页中的位置 伸缩能力

这是通过使用基本反射 transform,位于元素的引用中 帧。为清晰起见, 在显示参考系位移和反射时,系统会通过三个单独的调用分别 UpdatePageElementTransformRequest 方法, 但更高效的做法是预先计算这些转换的乘积, 矩阵,然后以单个请求的形式应用相应乘积。

对于 translation 转换, 箭头形状的中心在起点或终点之间移动。参数值 为清晰起见,以计算形式表示。

以下是反映 元素的请求协议:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX": -2000000 - 0.5 * 0.3  * 3000000,
            "translateY":  -550000 - 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": -1,
            "scaleY":  1,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

调整元素大小

以下 presentations.batchUpdate 代码示例展示了如何使用 UpdatePageElementTransformRequest 方法将示例箭头形状页面元素缩放至 50% 且只保持当前高度的 80%,同时保持箭头的中心位置, 使它保持在同一位置并保持其方向

这可通过使用基本扩缩设置 transform,位于元素的引用中 帧。为清晰起见, 在显示参考系时移和缩放时,系统会通过三个单独的调用分别 UpdatePageElementTransformRequest 方法, 但更高效的做法是预先计算这些转换的乘积, 矩阵,然后以单个请求的形式应用相应乘积。

对于 translation 转换, 箭头形状的中心在起点或终点之间移动。参数值 为清晰起见,以计算形式表示。

以下是用于调整元素大小的请求协议:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX": 1.5,
            "scaleY": 0.8,
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}

围绕元素的中心旋转元素

以下 presentations.batchUpdate 代码示例展示了如何使用 UpdatePageElementTransformRequest 旋转示例箭头形状页面元素的方法 35 同时保持箭头中心不变 以及保持其大小不变

这是通过使用基本旋转 transform,位于元素的引用中 帧。为清晰起见, 在显示参考系位移和旋转时,系统会分别通过三个单独的调用 UpdatePageElementTransformRequest 方法, 但更高效的做法是预先计算这些转换的乘积, 然后将乘积作为单个请求应用

对于 translation 转换, 箭头形状的中心在起点或终点之间移动。参数值 为清晰起见,以计算形式表示。

以下是关于围绕元素中心旋转元素的请求协议:

POST https://slides.googleapis.com/v1/presentations/PRESENTATION_ID:batchUpdate
{
  "requests": [
    {
      "updatePageElementTransform": {
          "objectId": PAGE_ELEMENT_ID,
          "applyMode": "RELATIVE",
          "transform": {
              "scaleX":  1,
              "scaleY":  1,
              "translateX": -2000000 - 0.5 * 0.3  * 3000000,
              "translateY":  -550000 - 0.5 * 0.12 * 3000000,
              "unit": "EMU"
          }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  cos(35 * (pi/180)),
            "scaleY":  cos(35 * (pi/180)),
            "shearX":  sin(35 * (pi/180)),
            "shearY": -sin(35 * (pi/180)),
            "unit": "EMU"
        }
      }
    },
    {
      "updatePageElementTransform": {
        "objectId": PAGE_ELEMENT_ID,
        "applyMode": "RELATIVE",
        "transform": {
            "scaleX":  1,
            "scaleY":  1,
            "translateX":  2000000 + 0.5 * 0.3  * 3000000,
            "translateY":   550000 + 0.5 * 0.12 * 3000000,
            "unit": "EMU"
        }
      }
    }
  ]
}