페이지 요소 크기 및 배치

페이지 요소의 크기와 위치를 가져오고 변경하는 방법에는 두 가지가 있습니다.

  1. 크기 및 위치에 getter 함수와 setter 함수를 사용합니다.
  2. 고유한 크기를 유지하면서 getTransform()setTransform() 함수를 사용하여 아핀 변환 조작

페이지 요소 속성 읽기

크기 조정 및 회전

그림과 같이 회전이 없는 경우 렌더링된 페이지 요소의 경계 상자를 기준으로 크기와 위치가 측정됩니다.

  • 왼쪽상단: 페이지의 왼쪽 상단 모서리에서 회전되지 않은 경계 상자의 왼쪽 상단까지 측정됩니다. getLeft()getTop()를 사용하여 값을 읽습니다.
  • 너비높이: 회전되지 않은 경계 상자의 너비와 높이입니다. getWidth()getHeight()를 사용하여 값을 읽습니다.
  • 회전: 경계 상자 중앙의 수직선을 기준으로 시계 방향 회전입니다. getRotation()를 사용하여 값을 읽습니다.

모든 길이는 포인트 (pt) 단위로 측정됩니다. 회전은 도(°) 단위로 측정됩니다.

페이지 요소 속성 설정

페이지 요소를 만들 때 insertShape()와 같은 삽입 메서드를 사용하여 페이지 요소의 크기와 위치를 설정할 수 있습니다. 기존 도형의 경우 크기, 위치, 회전을 설정할 수 있으며, 요소의 크기를 조절하거나 가장자리 중 하나에 반영되도록 크기를 조정할 수도 있습니다.

생성 시

페이지 요소를 만들 때 위치 및 크기 정보를 제공할 수 있습니다.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 100, 200, 300, 60);
Logger.log('Left: ' + shape.getLeft() + 'pt; Top: '
                    + shape.getTop() + 'pt; Width: '
                    + shape.getWidth() + 'pt; Height: '
                    + shape.getHeight() + 'pt; Rotation: '
                    + shape.getRotation() + ' degrees.');

위 스크립트는 지정된 위치와 크기로 활성 프레젠테이션의 첫 번째 슬라이드에 도형을 만들고 도형의 위치 및 크기 정보를 읽습니다. 예상되는 로그는 다음과 같습니다.

Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.

크기, 위치, 회전

페이지 요소를 만든 후 다음과 같이 크기와 위치를 업데이트할 수 있습니다.

  • setLeft()setTop()를 사용하여 회전하지 않은 경계 상자의 왼쪽 상단 모서리 위치를 설정합니다.
  • setWidth()setHeight()를 사용하여 경계 상자의 렌더링된 너비와 높이를 설정합니다.
  • setRotation()를 사용하여 중심을 중심으로 경계 상자의 시계 방향으로 회전을 설정합니다.

다음 스크립트는 활성 프레젠테이션의 첫 번째 슬라이드에 도형을 만들고 setter를 사용하여 도형의 위치, 크기, 회전을 업데이트하며 도형의 위치 및 크기 정보를 읽습니다.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setLeft(100).setTop(200).setWidth(50).setHeight(60).setRotation(90);
Logger.log('Left: ' + shape.getLeft()
                    + 'pt; Top: ' + shape.getTop()
                    + 'pt; Width: ' + shape.getWidth()
                    + 'pt; Height: ' + shape.getHeight()
                    + 'pt; Rotation: ' + shape.getRotation() + '\u00B0.');

이 스크립트에서 예상되는 로그 출력은 다음과 같습니다.

Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.

크기, 위치 및 회전 setter는 순서나 조합에 관계없이 사용할 수 있습니다. 위의 세 번째 줄을 다음 스크립트로 바꾸면 동일한 결과가 생성됩니다.

shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);

확장

위의 setWidth()setHeight()를 사용하여 도형의 크기를 절댓값으로 설정하는 대신 scaleWidth()scaleHeight()를 사용하여 상대적 배율로 페이지 요소를 늘리거나 줄일 수 있습니다.

shape.scaleHeight(0.5).scaleWidth(2);

아래 그림은 위의 코드가 45° 회전된 정사각형 도형에서 작동하는 방식을 보여줍니다. 크기 조정 중에는 경계 상자의 왼쪽 상단 모서리가 고정됩니다.

슬라이드 크기 조정

가장자리를 따라 반사된 이미지

scaleWidth()scaleHeight()의 인수는 음수일 수 있으므로 페이지 요소를 가로 또는 세로로 뒤집는 데 사용할 수 있습니다.

shape.scaleWidth(-1); // Flip horizontally along the left edge of the bounding box.
shape.scaleHeight(-1); // Flip vertically along the top edge of the bounding box.

아래 그림은 위의 코드가 45° 회전된 도형에서 작동하는 방식을 보여줍니다. 페이지 요소는 경계 상자의 중앙이 아닌 가장자리 중 하나를 따라 뒤집힙니다.

슬라이드 복습

선 회전

다른 페이지 요소와 마찬가지로 선의 회전은 선의 수직각이 아니라 경계 상자의 회전입니다. 지정된 시작점과 끝점이 있는 선을 만들면 선의 회전은 항상 0°입니다. Google Slides UI에서 선의 끝점을 드래그하면 수직 각도와 경계 상자의 크기 및 위치가 변경되지만 회전은 변경되지 않습니다. setRotation()를 사용하면 선의 경계 상자가 회전하여 수직 각도가 효과적으로 변경됩니다. 따라서 두 선의 시각적 수직각은 동일하지만 경계 상자가 다르며 크기, 위치, 회전 값이 다를 수 있습니다.

제한사항

일부 크기 및 위치 지정 방법은 일부 페이지 요소 유형과 호환되지 않습니다. 아래 표에는 특정 유형의 페이지 요소와 호환되지 않는 메서드가 요약되어 있습니다.

방법 모양 동영상 테이블
getHeight(), getWidth() NO (null을 반환함)
setHeight(), setWidth() 아니요
setRotation() 아니요 아니요
scaleHeight(), scaleWidth() 아니요

페이지 요소에 기울기가 있는 경우 모든 크기 및 위치 지정 방법에서 예기치 않은 결과가 발생할 수 있습니다. 모든 제한사항은 변경될 수 있습니다. 최신 정보는 참조를 확인하세요.

아핀 변환 사용

고급 제어의 경우 페이지 요소의 크기와 위치를 고유한 (네이티브) 크기 및 아핀 변환을 통해 계산 및 조정할 수도 있습니다.

Google Apps Script는 Google Slides API로 affine 변환을 사용하기 위한 유사한 인터페이스를 제공합니다.

  • 자료에서는 아핀 변환의 개념과 페이지 요소의 고유한(네이티브) 크기 및 변환으로부터 렌더링된 크기를 추론하는 방법을 설명합니다. Apps Script에서는 다음을 사용합니다.
    • 페이지 요소의 기본 크기: getInherentWidth()getInherentHeight()
    • getTransform(): 페이지 요소의 아핀 변환
  • 문서에서는 확장, 회전, 반전 등을 달성하기 위해 아핀 변환을 사용하여 페이지 요소의 크기 및 위치를 지정하는 방법을 설명합니다. Apps Script에서는
    • setTransform(): 페이지 요소의 아핀 변환을 설정합니다 (ABSOLUTE 모드와 유사).
    • preconcatenateTransform(): 아핀 변환을 페이지 요소의 현재 변환에 미리 연결합니다 (RELATIVE 모드와 유사).

다음 스크립트는 도형을 만들고 변환을 설정하고 고유 크기를 읽고 아핀 변환을 읽습니다.

var slide = SlidesApp.getActivePresentation().getSlides()[0];
var shape = slide.insertShape(SlidesApp.ShapeType.RECTANGLE);
shape.setTransform(SlidesApp.newAffineTransformBuilder()
                   .setScaleX(2)
                   .setScaleY(1)
                   .setTranslateX(100)
                   .setTranslateY(200)
                   .build());
Logger.log('Inherent width: ' + shape.getInherentWidth()
                              + 'pt; Inherent height: '
                              + shape.getInherentHeight() + 'pt.');

이 스크립트에서 예상되는 로그 출력은 다음과 같습니다.

Inherent width: 236.2pt; Inherent height: 236.2pt.

결과 도형에는 다음과 같은 변환과 렌더링된 크기 및 위치가 있습니다.

AffineTransform{scaleX=2.0, scaleY=1.0, shearX=0.0, shearY=0.0, translateX=100.0, translateY=200.0}
Left: 100pt; Top: 200pt; Width: 472.4pt; Height: 236.2pt; Rotation: 0°.