Interfejs Google Slides API umożliwia manipulowanie położeniem, rozmiarem i orientacją elementu
PageElement
(pola tekstowe, obrazy, tabele i kształty podstawowe) na stronie, przy jednoczesnym zachowaniu prostych linii
oraz punktów i linii równoległych. Są to tzw. przekształcenia afiniczne. Przykłady pokazują niektóre typowe operacje przekształcania elementów strony za pomocą metody
presentations.batchUpdate.
W tych przykładach używamy tych zmiennych:
- PRESENTATION_ID – wskazuje, gdzie należy podać identyfikator prezentacji. Wartość tego identyfikatora możesz znaleźć w adresie URL prezentacji.
- PAGE_ID – wskazuje, gdzie należy podać identyfikator obiektu strony. Wartość tego identyfikatora możesz pobrać z adresu URL lub za pomocą żądania odczytu interfejsu API.
- PAGE_ELEMENT_ID – wskazuje, gdzie należy podać identyfikator obiektu elementu strony. Możesz określić ten identyfikator dla tworzonych elementów (z pewnymi ograniczeniami) lub pozwolić interfejsowi Slides API na automatyczne utworzenie identyfikatora. Identyfikatory elementów można pobrać za pomocą żądania odczytu interfejsu API.
Przykłady są przedstawione jako żądania HTTP, aby były niezależne od języka. Aby dowiedzieć się jak wdrożyć aktualizację zbiorczą w różnych językach za pomocą bibliotek klienta Google API, przeczytaj artykuł Dodawanie kształtów i tekstu.
Przykładowy kształt strzałki
W poniższych przykładach zakładamy, że istnieje element strony w kształcie strzałki z tymi danymi dotyczącymi rozmiaru i przekształcenia (które można znaleźć za pomocą żądania metody
presentations.pages.get
): Przykładowy kształt używa jednostek miary
unit EMU (English Metric Unit) i pt
(punkt).
{
"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"
}
}Wyrównywanie elementu z innym elementem
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
CreateShapeRequest
do utworzenia nowych kształtów w prawidłowych pozycjach, które są wyrównane z
przykładowym kształtem strzałki na stronie. W obu przypadkach należy obliczyć współrzędne X i Y lewego górnego rogu nowego kształtu.
Pierwsze żądanie tworzy prostokąt o wymiarach 100 na 50 punktów, który jest wyrównany do lewej krawędzi kształtu strzałki, ale znajduje się 50 punktów (50 * 12 700 = 635 000 EMU) poniżej górnej krawędzi strzałki. Współrzędna X nowego prostokąta powinna być taka sama jak współrzędna X strzałki, aby zachować wyrównanie lewej krawędzi. Współrzędna Y jest taka sama jak współrzędna Y strzałki plus 50 punktów, ponieważ odległość jest mierzona od górnej krawędzi strzałki. Współrzędne prostokąta są zatem następujące:
x" = 2000000 EMU y" = 550000 + (50 * 12700) = 1185000 EMU
Drugie żądanie tworzy okrąg o szerokości 40 punktów, który ma tę samą poziomą linię środkową co przykładowa strzałka, ale znajduje się 100 punktów (1 270 000 EMU) na prawo od prawej krawędzi strzałki. Współrzędna X okręgu jest sumą współrzędnej X strzałki, szerokości strzałki i 100 punktów. Aby wymusić wyrównanie linii środkowej nowego okręgu, należy wziąć pod uwagę wysokość strzałki i okręgu. Współrzędna Y okręgu jest współrzędną Y strzałki plus połowa wysokości strzałki minus połowa wysokości okręgu. W obu przypadkach należy też wziąć pod uwagę współczynniki skalowania powiązane ze strzałką, ponieważ wpływają one na renderowaną szerokość i wysokość strzałki. Współrzędne okręgu są zatem następujące:
x = 2000000 + (0.3 * 3000000) + (100 * 12700) = 4170000 EMU y = 550000 + (0.5 * 0.12 * 3000000) - (0.5 * 40 * 12700) = 476000 EMU
Oto protokół żądania, który umożliwia wyrównanie elementu z innym elementem:
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"
}
}
}
}
]
}Przesuwanie elementu
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
UpdatePageElementTransformRequest
do przesunięcia przykładowego elementu strony w kształcie strzałki na
2 różne sposoby.
Pierwsze żądanie w pakiecie przesuwa strzałkę do współrzędnych (X,Y) = (2000000, 150000)
EMU (za pomocą przesunięcia bezwzględnego
applyMode).
Drugie żądanie w pakiecie przesuwa strzałkę z tego miejsca o 40 000 EMU
w prawo i 35 000 EMU w górę (za pomocą przesunięcia względnego applyMode).
Użyte macierze transformation1
są skonstruowane tak, aby nie zmieniać rozmiaru ani orientacji elementu.
Po wykonaniu obu żądań lewy górny róg strzałki znajduje się we współrzędnych (X,Y) = (2040000, 115000) EMU.
Oto protokół żądania, który umożliwia przesunięcie elementu:
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"
}
}
}
]
}Odbijanie elementu
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
UpdatePageElementTransformRequest
do odbicia przykładowego elementu strony w kształcie strzałki
w poziomie wzdłuż jego środka bez zmiany jego położenia na stronie ani
skalowania.
W tym celu używamy podstawowego odbicia
przekształcenia w ramce odniesienia
elementu. W celu uniknięcia wątpliwości, przesunięcie i odbicie ramki odniesienia są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest, ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy przekształceń, a następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku przekształceń przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. W celu uniknięcia wątpliwości wartości parametrów są wyrażone jako obliczenia.
Oto protokół żądania, który umożliwia odbicie elementu:
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"
}
}
}
]
}Zmienianie rozmiaru elementu
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
UpdatePageElementTransformRequest
do przeskalowania elementu strony w kształcie strzałki tak, aby był o 50%
szerszy i miał tylko 80% obecnej wysokości, przy jednoczesnym zachowaniu środka strzałki
w tej samej pozycji i zachowaniu jej orientacji.
W tym celu używamy podstawowego przekształcenia skalowania w ramce odniesienia elementu . W celu uniknięcia wątpliwości, przesunięcie i skalowanie ramki odniesienia są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest, ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy przekształceń
, a następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku przekształceń przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. W celu uniknięcia wątpliwości wartości parametrów są wyrażone jako obliczenia.
Oto protokół żądania, który umożliwia zmianę rozmiaru elementu:
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"
}
}
}
]
}Obracanie elementu wokół jego środka
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
UpdatePageElementTransformRequest
do obrócenia elementu strony w kształcie przykładowej strzałki o 35
stopni w kierunku przeciwnym do ruchu wskazówek zegara, przy jednoczesnym zachowaniu środka strzałki w tej samej pozycji
i zachowaniu jej rozmiaru.
W tym celu używamy podstawowego przekształcenia obrotu w ramce odniesienia elementu. W celu uniknięcia wątpliwości, przesunięcie i obrót ramki odniesienia są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest, ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy przekształceń
i następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku przekształceń przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. W celu uniknięcia wątpliwości wartości parametrów są wyrażone jako obliczenia.
Oto protokół żądania, który umożliwia obracanie elementu wokół jego środka:
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"
}
}
}
]
}