Google 簡報 API 可讓您操控頁面上的PageElement位置、大小和方向 (文字方塊、圖片、表格和基本圖案),同時保持線條筆直,並保留點和平行線。這些轉換稱為仿射轉換。以下範例顯示使用 presentations.batchUpdate 方法的一些常見網頁元素轉換作業。
這些範例使用下列變數:
- PRESENTATION_ID:指出您提供簡報 ID 的位置。您可以從簡報網址找出這個 ID 的值。
- PAGE_ID:指出您提供網頁物件 ID 的位置。您可以從網址或透過 API 讀取要求,擷取這個值。
- PAGE_ELEMENT_ID:指出您提供頁面元素物件 ID 的位置。您可以為建立的元素指定這個 ID (但有部分限制),也可以讓 Google 簡報 API 自動建立 ID。元素 ID 可透過 API 讀取要求擷取。
這些範例以 HTTP 要求的形式呈現,不限語言。如要瞭解如何使用 Google API 用戶端程式庫,以不同語言實作批次更新,請參閱「新增圖案和文字」。
箭頭形狀範例
在下列範例中,假設存在範例箭頭形狀頁面元素,且具有下列大小和轉換資料 (可透過 presentations.pages.get 方法要求找到)。範例形狀使用 EMU (英制公制單位) 和 pt (點) unit測量單位。
{
"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 點的圓圈,該圓圈與範例箭頭具有相同的水平中心線,但位於箭頭右側邊緣右方 100 點 (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 方法,以兩種不同方式翻譯「example arrow shape」頁面元素。
批次中的第一個要求會將箭頭移至 (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 方法,將「example arrow shape」 頁面元素逆時針旋轉 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"
}
}
}
]
}