簡報 API 可讓您控制網頁上的頁面元素 (文字、圖片、表格和形狀) 的位置、大小和方向,同時還能保持線條及保留點與平行線。這就是所謂的肯定轉換。此處的範例列舉了可透過 API 完成的一些常見網頁元素轉換作業。
這些範例使用以下變數:
- presentationId:指出您提供簡報 ID 的位置。您可以從簡報網址找到這個 ID 的值。
- pageId:指出您提供頁面物件 ID 的位置。您可以透過網址或使用 API 讀取要求擷取此值。
- pageElementId:指出您提供網頁元素物件 ID 的位置。您可以為自己建立 (有一些限制) 的元素指定這個 ID,或允許 API 自動建立元素 ID;您可以透過 API 讀取要求擷取元素 ID。
箭頭形狀範例
在以下範例中,假設有一個箭頭形狀頁面元素範例的大小和轉換資料如下 (可透過 presentations.pages.get 要求取得):
{ "objectId": pageElementId, "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 要求,建立與網頁上的箭頭形狀範例對齊的新形狀。在這兩種情況下,都必須計算新形狀左上角的 X 和 Y 座標。
presentations.BatchUpdate 批次中的第一個要求,會建立 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 pt 寬的圓圈,該圓圈的水平線與範例箭頭相同,但在箭頭右側邊緣的位置是 100 pt (1,270,000 EMU)。圓形的 X 座標是箭頭 X 座標、箭頭寬度和 100 點的總和。強制新圓形的中心線對齊時,必須將箭頭和圓的高度納入考量。圓形的 Y 座標是箭頭的 Y 座標,加上箭頭高度的一半再減半圓形高度。在這兩種情況下,您也必須將與箭頭相關的縮放係數納入考量,因為這兩者會影響箭頭的算繪寬度和高度。圓形的座標如下:
x" = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU y" = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU
這些計算的座標會用於下列 presentations.BatchUpdate 要求,以便將形狀新增至正確的位置。
要求通訊協定如下所示。新增文字和形狀指南中的範例,說明如何使用 Google API 用戶端程式庫,以不同語言實作批次更新。
POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{ "requests": [ { "createShape": { "shapeType": "RECTANGLE", "elementProperties": { "pageObjectId": pageId, "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": pageId, "size": { "width": { "magnitude": 40, "unit": "PT" }, "height": { "magnitude": 40, "unit": "PT" } }, "transform": { "scaleX": 1, "scaleY": 1, "translateX": 4170000, "translateY": 476000, "unit": "EMU" } } } } ] }
移動元素
這個範例使用 presentations.BatchUpdate 要求,以兩種不同方式翻譯範例箭頭形狀網頁元素。批次中的第一個要求會將箭頭移至 (X,Y) = (2000000, 150000) EMU 座標 (絕對翻譯)。批次的第二個要求會從該處移動箭頭,而這次的箭頭往右移 40,000 EMU,而 EMU 向上移動 35,000 EMU (相對翻譯)。我們建構的轉換矩陣可避免變更元素的大小和方向。
執行這兩項要求後,箭頭的左上角會在 (X,Y) = (2040000, 115000) EMU 座標處放置。
要求通訊協定如下所示。新增文字和形狀指南中的範例,說明如何使用 Google API 用戶端程式庫,以不同語言實作批次更新。
POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{ "requests": [ { "updatePageElementTransform": { "objectId": pageElementId, "applyMode": "ABSOLUTE", "transform": { "scaleX": 0.3, "scaleY": 0.12, "translateX": 2000000, "translateY": 150000, "unit": "EMU" } } }, { "updatePageElementTransform": { "objectId": pageElementId, "applyMode": "RELATIVE", "transform": { "scaleX": 1, "scaleY": 1, "translateX": 40000, "translateY": -35000, "unit": "EMU" } } } ] }
反映元素
下例使用 presentations.BatchUpdate 要求,以水平方向反映範例箭頭形狀元素,且不會改變其在網頁上的位置或縮放。方法是使用元素參照框架中的基本反射轉換。為免疑義,在此透過三個不同的 updatePageElementTransform 要求來處理參考影格轉移和映射,但對使用者來說,預先計算這些轉換矩陣的乘積並套用為單一要求會更有效率。
針對此處的 translation 轉換,箭頭形狀的中心會移入和移出原點。為求清楚起見,參數值會以計算表示。
要求通訊協定如下所示。新增文字和形狀指南中的範例,說明如何使用 Google API 用戶端程式庫,以不同語言實作批次更新。
POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{ "requests": [ { "updatePageElementTransform": { "objectId": pageElementId, "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": pageElementId, "applyMode": "RELATIVE", "transform": { "scaleX": -1, "scaleY": 1, "unit": "EMU" } } }, { "updatePageElementTransform": { "objectId": pageElementId, "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 要求,將範例箭頭形狀元素的寬度調整為 50%,但僅佔目前高度的 80%,同時將箭頭的中心維持在相同位置,並維持其方向。方法是在元素的參照框架中使用基本縮放轉換。為免疑義,在此透過三個不同的 updatePageElementTransform 要求來處理參考影格轉移和資源調度,但是針對這些轉換矩陣的產品預先計算,然後將該產品套用為單一要求更有效率。
針對此處的 translation 轉換,箭頭形狀的中心會移入和移出原點。為求清楚起見,參數值會以計算表示。
要求通訊協定如下所示。新增文字和形狀指南中的範例,說明如何使用 Google API 用戶端程式庫,以不同語言實作批次更新。
POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{ "requests": [ { "updatePageElementTransform": { "objectId": pageElementId, "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": pageElementId, "applyMode": "RELATIVE", "transform": { "scaleX": 1.5, "scaleY": 0.8, "unit": "EMU" } } }, { "updatePageElementTransform": { "objectId": pageElementId, "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 要求,將範例箭頭形狀元素逆時針旋轉 35 度,同時將箭頭的中心維持在相同位置,並維持其大小。方法是使用元素參照框架中的基本旋轉轉換。為免疑義,在此透過三個不同的 updatePageElementTransform 要求來處理參考影格轉移和旋轉,但預先計算這些轉換矩陣的乘積並套用為單一要求會更有效率。
針對此處的 translation 轉換,箭頭形狀的中心會移入和移出原點。為求清楚起見,參數值會以計算表示。
要求通訊協定如下所示。新增文字和形狀指南中的範例,說明如何使用 Google API 用戶端程式庫,以不同語言實作批次更新。
POST https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate
{ "requests": [ { "updatePageElementTransform": { "objectId": pageElementId, "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": pageElementId, "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": pageElementId, "applyMode": "RELATIVE", "transform": { "scaleX": 1, "scaleY": 1, "translateX": 2000000 + 0.5 * 0.3 * 3000000, "translateY": 550000 + 0.5 * 0.12 * 3000000, "unit": "EMU" } } } ] }