ページ要素のサイズ設定と配置

メッセージのサイズと位置を取得、変更する方法は 2 つあります。 ページ要素:

  1. サイズと位置にゲッター関数とセッター関数を使用する。
  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() を使用して、境界ボックスの時計回りの回転を設定します。 選択します。

次のスクリプトは、作業中のプレゼンテーションの最初のスライドに図形を作成します。 セッターを使用して位置、サイズ、回転を更新し、位置を読み取り シェイプのサイズ情報を提供します。

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°.

サイズ、位置、回転のセッターは、任意の順序や組み合わせで使用できます。 上記の 3 行目を次のスクリプトに置き換えても、同じ結果が得られます。

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 スライド UI の線の端点の垂直方向の角度も変化します。 境界ボックスのサイズと位置として指定されていますが、 作成します。setRotation() を使用すると、線の境界ボックスが回転し、 垂直角度が効果的に変化します。2 行で記述すれば、 垂直方向の角度は同じだが境界ボックスが異なるため、 さまざまなサイズ、位置、回転値があります。

制限事項

ページの種類によっては、一部のサイズ設定と配置方法に互換性がない あります。以下の表は、Terraform と互換性のないメソッドをまとめた 特定のタイプのページ要素です。

メソッド 図形 動画
getHeight(), getWidth() NO(null を返します)
setHeight(), setWidth() いいえ
setRotation() いいえ いいえ
scaleHeight(), scaleWidth() いいえ

どのサイズ設定と配置方法でも、ページのサイズに応じて予期しない結果が生じることがあります。 せん断が発生しています。すべての制限は変更される場合があります。リファレンスを確認: 提供します。

アフィン変換の使用

詳細に管理したい場合は、ページ要素のサイズと位置も指定できます。 その固有の(ネイティブ)サイズとアフィン変換によって計算と調整が行われます。

Google Apps Script には、Google スライド API と同様のアフィン変換インターフェースが用意されています。

  • 読むには、 こちらの記事で説明しています アフィン変換のコンセプトと、本来備わっている値からレンダリングされたサイズを推測する方法 (ネイティブ)サイズと変換です。Apps Script では、次のコマンドを使用します。
    • ページのネイティブ サイズ: getInherentWidth()getInherentHeight() 要素
    • getTransform(): ページ要素のアフィン変換。
  • 記述するには、 記事の内容 アフィン変換を使用してページ要素のサイズと配置を行い、 スケーリング、回転、反射などです。Apps Script では、 <ph type="x-smartling-placeholder">
      </ph>
    • 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°.