您可以透過兩種方式取得及變更網頁元素的大小和位置:
- 使用大小和位置的 getter 和 setter 函式。
- 使用
getTransform()
和setTransform()
函式操控其仿射變換,同時保留固有大小。
讀取網頁元素屬性
如圖所示,在沒有旋轉的情況下,系統會根據已算繪的網頁元素邊界框來測量大小和位置:
- 左和上:從頁面左上角到未旋轉邊界框左上角的距離。使用
getLeft()
和getTop()
讀取值。 - Width 和 Height:未旋轉的邊界框架的寬度和高度。使用
getWidth()
和getHeight()
讀取值。 - 旋轉:相對於定界框中央的垂直線,以順時針方向旋轉。使用
getRotation()
讀取值。
所有長度皆以點 (pt) 為單位。旋轉是以度數 (°) 為單位。
設定網頁元素屬性
您可以使用插入方法 (例如 insertShape()
) 建立網頁元素時,設定網頁元素的大小和位置。對於現有的圖形,您可以設定大小、位置和旋轉角度;您也可以設定元素的縮放比例,以便調整大小或沿著其中一個邊緣進行反射。
建立時
您可以在建立頁面元素時提供位置和大小資訊。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
+ shape.getTop() + 'pt; Width: '
+ shape.getWidth() + 'pt; Height: '
+ shape.getHeight() + 'pt; Rotation: '
+ shape.getRotation() + ' degrees.');
上述指令碼會在有效簡報的第一張投影片上,以指定位置和大小建立形狀,並讀取形狀的位置和大小資訊。預期的記錄如下:
Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.
大小、位置和旋轉
建立頁面元素後,您可以更新其大小和位置:
- 使用
setLeft()
和setTop()
設定未旋轉邊界框左上角的位置。 - 使用
setWidth()
和setHeight()
設定邊界框架的算繪寬度和高度。 - 使用
setRotation()
設定邊界框以順時針方向旋轉至中心點。
以下指令碼會在有效簡報的第一張投影片上建立形狀,並使用 setter 更新其位置、大小和旋轉角度,以及讀取形狀的位置和大小資訊。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
+ 'pt; Top: ' + shape.getTop()
+ 'pt; Width: ' + shape.getWidth()
+ 'pt; Height: ' + shape.getHeight()
+ 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');
這個指令碼的預期記錄輸出內容如下所示:
Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.
大小、位置和旋轉 setter 可任意排序或組合使用。將上述第三行替換為下列指令碼,也會產生相同的結果:
shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);
資源調度
與其使用上述 setWidth()
和 setHeight()
將形狀大小設為絕對值,不如使用 scaleWidth()
和 scaleHeight()
以相對縮放比例來拉伸或壓縮頁面元素。
shape.scaleHeight(0.5).scaleWidth(2);
下圖顯示上述程式碼如何在旋轉 45 度的正方形形狀上運作。請注意,定界框的左上角會在縮放期間固定。
沿邊反射
scaleWidth()
和 scaleHeight()
中的引數可以為負值,因此可用於水平或垂直翻轉網頁元素。
shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.
下圖顯示上述程式碼如何在旋轉 45° 的形狀上運作。請注意,頁面元素會沿著其邊界框線的其中一側邊緣翻轉,而非中心。
線條旋轉
與其他網頁元素一樣,線條的旋轉角度並非線條的垂直角度,而是其邊界框架的旋轉角度。建立具有指定起點和終點的線條時,其旋轉角度一律為 0°。在 Google 簡報 UI 中拖曳線條的端點,會變更其垂直角度,以及邊界框的大小和位置,但不會變更旋轉角度。使用 setRotation()
會旋轉線條的邊界框,有效地變更垂直角度。因此,兩條線條可能具有相同的視覺垂直角度,但有不同的邊界框,因此有不同的大小、位置和旋轉值。
限制
部分大小和定位方法與某些類型的網頁元素不相容。下表列出與特定類型網頁元素不相容的方法。
方法 | 圖案 | 影片 | 資料表 |
---|---|---|---|
getHeight(), getWidth() | ✔ | ✔ | 否 (傳回空值) |
setHeight(), setWidth() | ✔ | ✔ | 否 |
setRotation() | ✔ | 否 | 否 |
scaleHeight(), scaleWidth() | ✔ | ✔ | 否 |
如果網頁元素有剪切效果,所有大小和定位方法都可能會產生意外結果。所有限制都可能有所變動。請參閱參考資料,取得最新資訊。
使用仿射變換
針對進階控制,您也可以透過內在 (原生) 大小和仿射變換,計算及調整頁面元素的大小和位置。
Google Apps Script 提供類似的介面,可使用與 Google Slides API 相同的仿射變換。
- 如要瞭解相關資訊,請參閱這篇文章,瞭解仿射變換的概念,以及如何根據網頁元素的固有 (原生) 大小和轉換,推斷算繪大小。在 Apps Script 中使用
getInherentWidth()
和getInherentHeight()
:網頁元素的原生大小;getTransform()
用於頁面元素的仿射變換。
- 本文文章將說明如何使用仿射變換來調整頁面元素的大小和位置,以便縮放、旋轉、反射等。在 Apps Script 中,請使用
setTransform()
:設定頁面元素的仿射變換 (類似於 ABSOLUTE 模式)。preconcatenateTransform()
:將仿射變換預先連接至網頁元素的目前變換 (類似 RELATIVE 模式)。
以下指令碼會建立形狀、設定其轉換、讀取其固有大小,以及讀取其仿射轉換。
var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
.setScaleX(2)
.setScaleY(1)
.setTranslateX(100)
.setTranslateY(200)
.build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
+ 'pt; Inherent height: '
+ shape.getInherentHeight() + 'pt.');
這個指令碼的預期記錄輸出內容如下所示:
Inherent width: 236.2pt; Inherent height: 236.2pt.
產生的形狀將具有下列轉換,以及算繪大小和位置:
AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.