Transformationsvorgänge

Mit der Google Slides API können Sie die Position, Größe und Ausrichtung von PageElement (Textfelder, Bilder, Tabellen und einfache Formen) auf einer Seite bearbeiten, wobei Linien gerade bleiben und Punkte und parallele Linien beibehalten werden. Diese werden als affine Transformationen bezeichnet. Die Beispiele hier zeigen einige gängige Transformationsvorgänge für Seitenelemente mit der Methode presentations.batchUpdate.

In diesen Beispielen werden die folgenden Variablen verwendet:

  • PRESENTATION_ID: Gibt an, wo Sie die Präsentations-ID angeben. Den Wert für diese ID finden Sie in der Präsentations-URL.
  • PAGE_ID: Gibt an, wo Sie die Seitenobjekt-ID angeben. Sie können den Wert dafür aus der URL oder mit einer API-Leseanfrage abrufen.
  • PAGE_ELEMENT_ID: Gibt an, wo Sie die Objekt-ID des Seitenelements angeben. Sie können diese ID für Elemente angeben, die Sie erstellen (mit einigen Einschränkungen), oder die Google Slides API automatisch eine erstellen lassen. Element-IDs können über eine API-Leseanfrage abgerufen werden.

Diese Beispiele werden als HTTP-Anfragen dargestellt, um sprachneutral zu sein. Weitere Informationen zum Implementieren einer Batch-Aktualisierung in verschiedenen Sprachen mit den Google API-Clientbibliotheken

Beispiel für eine Pfeilform

In den folgenden Beispielen wird davon ausgegangen, dass ein Beispiel für ein Pfeilelement mit den folgenden Größen- und Transformationsdaten vorhanden ist (die mit einer presentations.pages.get-Methodenanfrage abgerufen werden können). Für die Beispielform werden die Maßeinheiten unit EMU (English Metric Unit) und pt (Punkt) verwendet.

{   "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"   } }

Element an einem anderen ausrichten

Das folgende presentations.batchUpdate-Codebeispiel zeigt, wie Sie mit der Methode CreateShapeRequest neue Formen an den richtigen Positionen erstellen, die an der Beispielpfeilform auf der Seite ausgerichtet sind. In beiden Fällen müssen die X- und Y-Koordinaten der oberen linken Ecke der neuen Form berechnet werden.

Mit der ersten Anfrage wird ein 100 × 50 pt großes Rechteck erstellt, das am linken Rand der Pfeilform ausgerichtet ist, aber 50 pt (50 * 12.700 = 635.000 EMU) unter dem oberen Rand des Pfeils positioniert ist. Die X-Koordinate des neuen Rechtecks sollte mit der X-Koordinate des Pfeils übereinstimmen, damit die linke Begrenzung ausgerichtet bleibt. Die Y-Koordinate ist dieselbe wie die Y-Koordinate des Pfeils plus 50 pt, da der Abstand vom oberen Rand des Pfeils aus gemessen wird. Die Koordinaten des Rechtecks sind daher:

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

Mit der zweiten Anfrage wird ein 40 pt breiter Kreis erstellt, der dieselbe horizontale Mittellinie wie der Beispielpfeil hat, aber 100 pt (1.270.000 EMU) rechts vom rechten Rand des Pfeils positioniert ist. Die X-Koordinate des Kreises ist die Summe aus der X-Koordinate des Pfeils, der Pfeilbreite und 100 pt. Um die Mittellinienausrichtung für den neuen Kreis zu erzwingen, muss die Höhe sowohl des Pfeils als auch des Kreises berücksichtigt werden. Die Y-Koordinate des Kreises ist die Y-Koordinate des Pfeils plus die Hälfte der Pfeilhöhe minus die Hälfte der Kreishöhe. In beiden Fällen müssen auch die mit dem Pfeil verknüpften Skalierungsfaktoren berücksichtigt werden, da sie sich auf die gerenderte Breite und Höhe des Pfeils auswirken. Die Koordinaten des Kreises sind daher:

x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU

Im Folgenden finden Sie das Anfrageprotokoll zum Ausrichten eines Elements an einem anderen:

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"           }         }       }     }   ] }

Element verschieben

Das folgende presentations.batchUpdate-Codebeispiel zeigt, wie Sie die Methode UpdatePageElementTransformRequest verwenden, um das Seitenelement Beispiel für Pfeilform auf zwei verschiedene Arten zu übersetzen.

Mit der ersten Anfrage im Batch wird der Pfeil an die EMU-Koordinate (X,Y) = (2000000, 150000) verschoben (mit einer absoluten Translation applyMode). Mit der zweiten Anfrage im Batch wird der Pfeil von dort aus verschoben, diesmal um 40.000 EMU nach rechts und um 35.000 EMU nach oben (mit einer relativen Translation applyMode). Die verwendeten transformation1-Matrizen sind so aufgebaut, dass sich die Größe und Ausrichtung des Elements nicht ändern.

Nach der Ausführung beider Anfragen befindet sich die linke obere Ecke des Pfeils an der EMU-Koordinate (X,Y) = (2040000, 115000).

Im Folgenden finden Sie das Anfrageprotokoll zum Verschieben eines Elements:

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"         }       }     }   ] }

Element spiegeln

Das folgende presentations.batchUpdate-Codebeispiel zeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für Pfeilform horizontal entlang seiner Mitte spiegeln, ohne seine Position auf der Seite oder seine Skalierung zu ändern.

Dazu wird eine einfache Spiegelungstransformation im Referenzrahmen des Elements verwendet. Zur Verdeutlichung werden die Verschiebung und Spiegelung des Referenzrahmens mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann als einzelne Anfrage anzuwenden.

Bei den Übersetzungs-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Im Folgenden finden Sie das Anfrageprotokoll zum Spiegeln eines Elements:

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"         }       }     }   ] }

Größe eines Elements anpassen

Im folgenden presentations.batchUpdate-Codebeispiel wird gezeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispiel für Pfeilform so skalieren, dass es 50 % breiter und nur 80% so hoch wie bisher ist. Dabei wird der Mittelpunkt des Pfeils an derselben Position beibehalten und die Ausrichtung nicht geändert.

Dazu wird eine einfache Skalierungstransformation im Referenzrahmen des Elements verwendet. Zur besseren Übersicht werden die Verschiebung und Skalierung des Referenzrahmens mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann als einzelne Anfrage anzuwenden.

Bei den Übersetzungs-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Das folgende Protokoll beschreibt, wie Sie die Größe eines Elements ändern:

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"         }       }     }   ] }

Element um seinen Mittelpunkt drehen

Das folgende presentations.batchUpdate-Codebeispiel zeigt, wie Sie mit der Methode UpdatePageElementTransformRequest das Seitenelement Beispielpfeilform um 35 Grad gegen den Uhrzeigersinn drehen können, wobei die Mitte des Pfeils an derselben Position bleibt und die Größe beibehalten wird.

Dazu wird eine einfache Drehtransformation im Referenzrahmen des Elements verwendet. Zur besseren Übersicht werden die Verschiebung und Drehung des Referenzrahmens mit drei separaten Aufrufen der Methode UpdatePageElementTransformRequest dargestellt. Es ist jedoch effizienter, das Produkt dieser Transformationsmatrizen vorab zu berechnen und dann als einzelne Anfrage anzuwenden.

Bei den Übersetzungs-Transformationen wird der Mittelpunkt der Pfeilform zum und vom Ursprung verschoben. Die Parameterwerte werden zur besseren Übersicht als Berechnungen ausgedrückt.

Im Folgenden sehen Sie das Anfrageprotokoll zum Drehen eines Elements um seinen Mittelpunkt:

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"         }       }     }   ] }