借助 Google 幻灯片 API,您可以操控页面上
PageElement
(文本框、图片、表格和基本形状)的位置、大小和方向,同时保持线条
笔直,并保留点和平行线。这些操作称为仿射转换 。此处的示例展示了如何使用
presentations.batchUpdate
方法执行一些常见的页面元素转换操作。
这些示例使用以下变量:
- PRESENTATION_ID:表示您提供 演示文稿 ID的位置。您可以从演示文稿网址中发现此 ID 的值。
- PAGE_ID:表示您提供页面对象 ID的位置。您可以从网址中检索此 ID 的值,也可以使用 API 读取请求来检索。
- PAGE_ELEMENT_ID:表示您提供页面 元素对象 ID的位置。您可以为自己创建的元素指定此 ID(有一些限制),也可以让幻灯片 API 自动创建一个。您可以通过 API 读取请求检索元素 ID。
这些示例以 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 坐标。
第一个请求会创建一个 100 x 50 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)处。圆形的 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
方法沿 示例箭头形状 页面元素的中心水平反射该元素,而不会更改其在页面上的位置或
缩放比例。
这是通过在元素的参考
框架中使用基本反射
转换来实现的。为清楚起见,参考框架偏移和反射通过对UpdatePageElementTransformRequest方法的三个单独调用来显示,但更有效的方法是预先计算这些转换矩阵的乘积,然后将该乘积作为单个请求应用。
对于平移转换, 箭头形状的中心会移入和移出原点。为清晰起见,参数值以计算的形式表示。
以下是反射元素的请求协议:
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%,同时保持箭头的中心
位置不变并保持其方向。
这是通过在元素的参考
框架中使用基本缩放
转换来实现的。为清楚起见,
参考框架偏移和缩放通过对
UpdatePageElementTransformRequest方法的三个单独调用来显示,
但更有效的方法是预先计算这些转换
矩阵的乘积,然后将该乘积作为单个请求应用。
对于平移转换, 箭头形状的中心会移入和移出原点。为清晰起见,参数值以计算的形式表示。
以下是调整元素大小的请求协议:
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
度,同时保持箭头的中心位置不变
并保持其大小。
这是通过在元素的参考
框架中使用基本旋转
转换来实现的。为清楚起见,参考框架偏移和旋转通过对UpdatePageElementTransformRequest 方法的三个单独调用来显示,但更有效的方法是预先计算这些转换矩阵的乘积,然后将该乘积作为单个请求应用
对于平移转换, 箭头形状的中心会移入和移出原点。为清晰起见,参数值以计算的形式表示。
以下是围绕中心旋转元素的请求协议:
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"
}
}
}
]
}