API Google Slides позволяет манипулировать расположением, размером и ориентацией PageElement
(текстовых полей, изображений, таблиц и основных фигур) на странице, сохраняя при этом прямые линии и сохраняя точки и параллельные линии. Они известны как аффинные преобразования . В приведенных здесь примерах показаны некоторые распространенные операции преобразования элементов страницы с использованием presentations.batchUpdate
.
В этих примерах используются следующие переменные:
- PRESENTATION_ID —Указывает, где вы предоставляете идентификатор презентации . Значение этого идентификатора можно узнать по URL-адресу презентации.
- PAGE_ID —Указывает, где вы предоставляете идентификатор объекта страницы . Вы можете получить это значение по URL-адресу или с помощью запроса на чтение API.
- PAGE_ELEMENT_ID —Указывает, где вы предоставляете идентификатор объекта элемента страницы . Вы можете указать этот идентификатор для создаваемых вами элементов (с некоторыми ограничениями ) или разрешить Slides API автоматически создавать его. Идентификаторы элементов можно получить с помощью запроса на чтение API.
Эти примеры представлены в виде 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 на 50 пикселей, который выровнен по левой границе фигуры стрелки, но расположен на 50 пунктов (50 * 12 700 = 635 000 EMU) ниже верхнего края стрелки. Координата X нового прямоугольника должна совпадать с координатой X стрелки, чтобы ее левая граница оставалась выровненной. Координата Y равна координате Y стрелки плюс 50 пт, поскольку расстояние измеряется от вершины стрелки. Таким образом, координаты прямоугольника таковы:
x" = 2000000 EMU y" = 550000 + (50 * 12700) = 1185000 EMU
Второй запрос создает круг шириной 40 пт, который имеет ту же горизонтальную центральную линию, что и стрелка в примере, но расположен на 100 пт (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
Ниже приведен протокол запроса для выравнивания одного элемента с другим:
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 вправо и на 35 000 EMU вверх (с использованием относительного перевода applyMode
). Используемые матрицы преобразования1 построены таким образом, чтобы избежать изменения размера и ориентации элемента.
После выполнения обоих запросов верхний левый угол стрелки находится в координате (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" } } } ] }