Google 簡報 API 可讓您操作頁面上 PageElement
的位置、大小和方向 (文字方塊、圖片、表格和基本形狀),同時保持直線筆直,並保留點和平行線。這就是所謂的仿射變換。以下範例說明使用 presentations.batchUpdate
方法的常見網頁元素轉換作業。
這些範例使用下列變數:
- PRESENTATION_ID:指出您提供簡報 ID的位置。您可以從簡報網址中找出這個 ID 的值。
- PAGE_ID:指出您提供頁面物件 ID的位置。您可以從網址或透過 API 讀取要求擷取此值。
- PAGE_ELEMENT_ID:指出您提供頁面元素物件 ID的位置。您可以為所建立的元素指定此 ID (並設下某些限制),或是讓 Slides 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 座標。
第一個要求會建立 100 x 50 點的矩形,並與箭頭形狀的左邊框對齊,但會位於箭頭頂端邊緣下方 50 點 (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
方法,以兩種不同的方式翻譯示例箭頭形狀頁面元素。
批次中的第一個要求會將箭頭移至 (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
方法呼叫來顯示參考座標軸移位和反射效果,但預先計算這些轉換矩陣的乘積,然後將該乘積做為單一要求套用,會更有效率。
對於translation 轉換,箭頭形狀的中心會在原點之間移動。為求清楚起見,我們以計算方式表示參數值。
以下是反映元素的要求通訊協定:
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
方法,將示例箭頭形狀網頁元素縮放至目前高度的 80%,並使其寬度增加 50%,同時讓箭頭的中心保持在相同位置,並維持其方向。
方法是在元素的參考影格中使用基本縮放轉換。為了方便說明,我們使用三個個別的 UpdatePageElementTransformRequest
方法呼叫來顯示參考座標軸偏移和縮放,但預先計算這些轉換矩陣的乘積,然後將該乘積做為單一要求套用,會更有效率。
對於translation 轉換,箭頭形狀的中心會在原點之間移動。為求清楚起見,我們以計算方式表示參數值。
以下是調整元素大小的要求通訊協定:
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
方法呼叫來顯示參考座標軸移位和旋轉,但預先計算這些轉換矩陣的乘積,然後將該乘積做為單一要求套用,會更有效率
對於translation 轉換,箭頭形狀的中心會移動到原點,然後再移動回原點。為求清楚起見,我們以計算方式表示參數值。
以下是將元素旋轉至其中心的請求通訊協定:
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" } } } ] }