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. transformacje 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 interfejsu 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 postaci przykładowego kształtu strzałki o tych rozmiarach i danych transformacji (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 pt, który jest wyrównany do lewej krawędzi kształtu strzałki, ale znajduje się 50 pt (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 pt, 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 pt, który ma tę samą poziomą linię środkową co przykładowa strzałka, ale znajduje się 100 pt (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 pt. 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 równa współrzędnej 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"
}
}
}
}
]
}Przenoszenie elementu
Poniższy
presentations.batchUpdate
przykładowy kod pokazuje, jak użyć metody
UpdatePageElementTransformRequest
do przesunięcia przykładowego elementu strony w postaci kształtu strzałki na
2 różne sposoby.
Pierwsze żądanie w pakiecie przenosi strzałkę na współrzędne (X,Y) = (2000000, 150000)
EMU (za pomocą przesunięcia bezwzględnego
applyMode).
Drugie żądanie w pakiecie przenosi 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ę na współrzędnych (X,Y) = (2040000, 115000) EMU.
Oto protokół żądania, który umożliwia przeniesienie 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 postaci kształtu strzałki
w poziomie wzdłuż jego środka bez zmiany jego położenia na stronie ani
skalowania.
W tym celu używamy podstawowej transformacji odbicia
w ramce odniesienia elementu . W celu uniknięcia wątpliwości przesunięcie ramki odniesienia i odbicie są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest, ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy transformacji
i następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku transformacji przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.
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 postaci kształtu strzałki tak, aby był o 50%
szerszy i miał tylko 80% swojej obecnej wysokości, przy jednoczesnym zachowaniu środka strzałki
w tej samej pozycji i zachowaniu jej orientacji.
W tym celu używamy podstawowej transformacji skalowania w ramce odniesienia elementu. W celu uniknięcia wątpliwości przesunięcie ramki odniesienia i skalowanie są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest,
ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy transformacji
i następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku transformacji przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.
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 postaci kształtu strzałki przykładu 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 podstawowej transformacji obrotu w ramce odniesienia elementu. W celu uniknięcia wątpliwości przesunięcie ramki odniesienia i obrót są pokazane za pomocą 3 oddzielnych wywołań metody
UpdatePageElementTransformRequest,
ale bardziej wydajne jest wstępne obliczenie iloczynu tych macierzy transformacji
i następnie zastosowanie tego iloczynu jako pojedynczego żądania.
W przypadku transformacji przesunięcia środek kształtu strzałki jest przesuwany do początku układu współrzędnych i z powrotem. Wartości parametrów są wyrażone jako obliczenia w celu uniknięcia wątpliwości.
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"
}
}
}
]
}