调整页面元素的大小和位置

本指南介绍如何使用仿射转换确定页面元素的大小和位置。如需简要了解仿射转换,请参阅转换概念指南。

转换元素

您可以通过 Slides API 调整页面上的元素的位置和缩放比例。为此,请先确定需要应用哪种转换,然后使用包含一个或多个 UpdatePageElementTransformRequest 元素的 presentations.batchUpdate 方法应用该转换。

可通过以下两个 applyModes 之一执行转换:

  • ABSOLUTE 转换会替换元素的现有转换矩阵。将在转换更新请求中忽略的所有参数设为零。

  • RELATIVE 转换与元素的现有转换矩阵相乘(相乘的顺序很重要):

$$A' = BA$$

相对转换从页面元素的当前位置移动或缩放页面元素;例如,将形状向左移动 100 点,或将其旋转 40 度。绝对转换会舍弃现有位置和缩放比例信息;例如,将形状移动到页面的中心位置,或将形状缩放到特定宽度。

复杂的转换通常可以表述为一系列较为简单的转换。预先计算转换(使用矩阵乘法将多个转换相结合)通常可减少开销。

对于某些操作,您必须知道元素的现有转换参数是什么。如果您没有这些值,可以使用 presentations.pages.get 请求检索它们。

翻译

转换操作只是将页面元素移动到同一页面上的新位置。绝对转换会将元素移动到一个特定点,而相对转换则是将元素移动特定的距离。

基本平移转换矩阵的格式如下:

$$T=\begin{bmatrix} 1 & 0 & translate\_x\\ 0 & 1 & translate\_y\\ 0 & 0 & 1 \end{bmatrix}$$

当您使用 UpdatePageElementTransformRequest 转换元素(无需改变其大小、剪切或方向)时,您可以使用以下 AffineTransform 结构之一:

// Absolute translation:
{
  'transform': {
    'scaleX':  current scaleX value,
    'scaleY':  current scaleY value,
    'shearX':  current shearX value,
    'shearY':  current shearY value,
    'translateX': X coordinate to move to,
    'translateY': Y coordinate to move to,
    'unit': 'EMU' // or 'PT'
  }
}

// Relative translation (scaling must also be provided to avoid a matrix multiplication error):
{
  'transform': {
    'scaleX':  1,
    'scaleY':  1,
    'translateX': X coordinate to move by,
    'translateY': Y coordinate to move by,
    'unit': 'EMU' // or 'PT'
  }
}

扩缩

缩放操作是沿着 X 维和/或 Y 维对元素进行拉伸或挤压,以改变其大小。基本缩放转换矩阵的格式如下:

$$S=\begin{bmatrix} scale\_x & 0 & 0\\ 0 & scale\_y & 0\\ 0 & 0 & 1 \end{bmatrix}$$

您可以将此矩阵格式直接作为 RELATIVE 转换使用以调整元素的大小,但这可能会影响元素已渲染的剪切和转换。如需在不影响元素的剪切或平移的情况下对元素进行缩放,请移动到它的参考边框

旋转

旋转转换使用缩放比例和剪切参数围绕一个点旋转页面元素。基本旋转转换矩阵具有以下格式,其中旋转角度(以弧度为单位)是从 X 轴测量的,沿逆时针方向移动:

$$R=\begin{bmatrix} cos(\theta) & sin(\theta) & 0\\ -sin(\theta) & cos(\theta) & 0\\ 0 & 0 & 1 \end{bmatrix}$$

与缩放一样,您可以将此矩阵格式直接作为 RELATIVE 转换使用以旋转元素,但这会导致元素围绕页面的原点旋转。如需围绕元素中心或其他点旋转元素,请移动到该参考边框

反思

反射可在特定线条或轴的另一侧镜像元素。基本的 x 轴和 y 轴反射转换矩阵具有以下格式:

$$F_x=\begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}\qquad\qquad F_y=\begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1\\ \end{bmatrix}$$

与缩放一样,您可以将此矩阵格式直接作为 RELATIVE 转换使用以反射元素,但这也会转换元素。如需在不进行任何转换的情况下反射元素,请移动到它的参考边框

元素参考边框

将基本缩放反射旋转转换直接应用到页面元素会在页面的参考边框中产生一个转换。例如,一个基本旋转会围绕页面的原点(左上角)旋转元素。不过,您可以在元素自身的参考边框中进行操作,例如,围绕元素的中心点旋转元素。

如需在元素自身的参考边框中将元素转换,可将其包含在两个其他转换中:将元素中心移到页面原点的第一个转换 T1,以及将元素移回其原始位置的第二个转换 T2。完整操作可使用矩阵乘积表示:

$$A' = T2 \times B \times T1 \times A$$

您还可以通过将不同的点转换到原点,从而切换到其他参考边框。这些点将成为新的参考边框的中心。

可按顺序 RELATIVE 转换请求的方式逐个执行这些转换中的每一个转换。理想情况下,您应使用矩阵乘法运算预先计算上面的 A',并将结果作为一个 ABSOLUTE 转换应用。或者,预先计算 T2 * B * T1 乘积,并将其作为一个 RELATIVE 转换应用。就进行 API 运算,然后单独发送转换请求而言,这两种方式都比较有效。

限制

某些尺寸和定位字段与某些类型的页面元素不兼容。下表总结了某些网页元素与大小调整和定位字段的兼容性。

字段 形状 视频
翻译
发展壮大 否**
剪裁

** 如需更新表行和列的尺寸,请使用 UpdateTableRowPropertiesRequestUpdateTableColumnPropertiesRequest

如果网页元素发生剪裁,所有尺寸和定位字段都可能会产生意外结果。所有限制都可能会发生变化。如需了解最新信息,请参阅 Google 幻灯片 API

Slides API 可以重构您的值

创建页面元素时,您可以指定提供特定视觉效果的大小和转换。不过,此 API 可将您提供的值替换为可产生相同视觉外观的其他值。一般情况下,如果您使用此 API 写入一个大小,则不能保证返回相同的大小。不过,如果您将转换考虑在内,那么,您会获得相同的结果。