轉換作業

Google 簡報 API 可讓您在頁面上操控 PageElement (文字方塊、圖片、表格和基本形狀) 的位置、大小和方向,同時讓線條保持清晰並保留點與平行線。這就是所謂的「興趣相似目標對象轉換」。以下範例說明使用 presentations.batchUpdate 方法進行的一些常見的網頁元素轉換作業。

這些範例使用下列變數:

  • PRESENTATION_ID:指出您提供呈現 ID 的位置。您可以透過顯示網址探索這個 ID 的值。
  • PAGE_ID:指出您在何處提供頁面物件 ID。您可以從網址或使用 API 讀取要求擷取這個值。
  • PAGE_ELEMENT_ID:指出您在何處提供網頁元素物件 ID。您可以為自己建立的元素 (設有部分限制) 指定此 ID,或讓 Slide API 自動建立。您可以透過 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 pt 矩形,並與箭頭形狀的左側邊框對齊,但在箭頭頂部邊緣下方放置 50 pt (50 * 12,700 = 635,000 EMU)。新矩形的 X 座標應與箭頭的 X 座標相同,以便讓左框線對齊。Y 座標與箭頭的 Y 座標加上 50 pt 相同,因為距離是從箭頭頂端測量而得。因此矩形的座標為:

x" = 2000000 EMU
y" = 550000 + (50 * 12700) = 1185000 EMU

第二個要求會建立 40pt 寬圓形,其中與範例箭頭相同,但放置在箭頭右側邊緣的右側位置為 100 pt (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 朝右,並使applyMode使用 35,000 EMU 的方向向上移動。

執行這兩項要求後,箭頭的左上角會停留在 (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 方法,將範例箭頭形狀頁面元素逆時針旋轉 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"
        }
      }
    }
  ]
}