您可以通过 Google Slides API 处理页面上PageElement
(文本框、图像、表格和基本形状)的位置、大小和方向,同时使线保持平直,并保留点和平行线。这些转换称为仿射转换。此处的示例展示了使用 presentations.batchUpdate
方法执行的一些常用页面元素转换操作。
这些示例使用以下变量:
- PRESENTATION_ID - 表示您提供演示文稿 ID 的位置。您可以通过演示文稿网址查找此 ID 的值。
- PAGE_ID - 表示您提供页面对象 ID 的位置。您可以从网址或使用 API 读取请求检索此 ID 的值。
- PAGE_ELEMENT_ID - 表示您提供页面元素对象 ID 的位置。您可以为您创建的元素指定此 ID(具有一些限制),也可以允许 Google 幻灯片 API 自动创建一个 ID。您可以通过 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 坐标。
第一个请求会创建一个 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) 处。圆形的 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" } } } ] }