API Google Slides позволяет изменять расположение, размер и ориентацию PageElement (текстовых полей, изображений, таблиц и простых фигур) на странице, сохраняя при этом прямые линии, а также точки и параллельные линии. Такие преобразования называются аффинными преобразованиями . Приведенные здесь примеры демонстрируют некоторые распространенные операции преобразования элементов страницы с использованием метода presentations.batchUpdate .
В этих примерах используются следующие переменные:
- PRESENTATION_ID — указывает, где вы указываете идентификатор презентации . Значение этого идентификатора можно узнать из URL-адреса презентации.
- PAGE_ID — указывает, где вы указываете идентификатор объекта страницы . Вы можете получить его значение из URL-адреса или с помощью запроса на чтение через API.
- PAGE_ELEMENT_ID — указывает, где вы указываете идентификатор объекта элемента страницы . Вы можете указать этот идентификатор для создаваемых вами элементов (с некоторыми ограничениями ) или разрешить API Slides автоматически создавать его. Идентификаторы элементов можно получить с помощью запроса на чтение 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 смещения ). Используемые матрицы преобразования построены таким образом, чтобы избежать изменения размера и ориентации элемента.
После выполнения обоих запросов верхний левый угол стрелки оказывается в точке с координатами (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"
}
}
}
]
}