Vous pouvez obtenir et modifier la taille et la position d'un élément de page de deux manières différentes:
- À l'aide de ses fonctions getter et setter pour la taille et la position.
- Manipuler sa transformation affine à l'aide de ses fonctions
getTransform()
etsetTransform()
tout en conservant la taille inhérente.
Lire les propriétés des éléments de page
Comme illustré dans la figure, la taille et la position sont mesurées par rapport au cadre de délimitation d'un élément de page affiché lorsqu'il n'est pas en rotation:
- Gauche et Haut: mesurés à partir de l'angle supérieur gauche de la page jusqu'à l'angle supérieur gauche de la zone de délimitation non pivotée. Utilisez
getLeft()
etgetTop()
pour lire les valeurs. - Width (Largeur) et Height (Hauteur) : largeur et hauteur du cadre de délimitation non pivoté.
Utilisez
getWidth()
etgetHeight()
pour lire les valeurs. - Rotation: rotation dans le sens des aiguilles d'une montre par rapport à la ligne verticale autour du centre du cadre de délimitation. Utilisez
getRotation()
pour lire la valeur.
Toutes les longueurs sont mesurées en points (pt). La rotation est mesurée en degrés (°).
Définir les propriétés des éléments de page
Vous pouvez définir la taille et la position d'un élément de page lorsque vous le créez à l'aide d'une méthode d'insertion telle que insertShape()
. Pour une forme existante, vous pouvez définir la taille, la position et la rotation. Vous pouvez également définir l'échelle d'un élément pour le redimensionner ou le refléter le long de l'un de ses bords.
À la création
Vous pouvez fournir des informations sur la position et la taille lorsque vous créez un élément de page.
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.');
Le script ci-dessus crée une forme sur la première diapositive de la présentation active avec la position et la taille spécifiées, puis lit les informations de position et de taille de la forme. Le journal attendu est le suivant:
Left: 100pt; Top: 200pt; Width: 300pt; Height: 60pt; Rotation: 0 degrees.
Taille, position et rotation
Vous pouvez modifier la taille et la position d'un élément de page après sa création:
- Utilisez
setLeft()
etsetTop()
pour définir la position de l'angle supérieur gauche de la zone de délimitation non pivotée. - Utilisez
setWidth()
etsetHeight()
pour définir la largeur et la hauteur affichées de la zone de délimitation. - Utilisez
setRotation()
pour définir la rotation dans le sens des aiguilles d'une montre de la zone de délimitation autour de son centre.
Le script suivant crée une forme sur la première diapositive de la présentation active, utilise des sétteurs pour mettre à jour sa position, sa taille et sa rotation, et lit les informations de position et de taille de la forme.
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.');
La sortie du journal attendue de ce script est la suivante:
Left: 100pt; Top: 200pt; Width: 50pt; Height: 60pt; Rotation: 90°.
Les sélecteurs de taille, de position et de rotation peuvent être utilisés dans n'importe quel ordre ou combinaison. Remplacer la troisième ligne ci-dessus par le script suivant produit le même résultat:
shape.setWidth(55);
shape.setRotation(90).setHeight(60).setLeft(100);
shape.setWidth(50).setTop(200);
Scaling
Au lieu d'utiliser setWidth()
et setHeight()
ci-dessus pour définir la taille de la forme sur une valeur absolue, scaleWidth()
et scaleHeight()
peuvent être utilisés pour étirer ou réduire un élément de page avec un facteur de mise à l'échelle relatif.
shape.scaleHeight(0.5).scaleWidth(2);
La figure ci-dessous montre comment le code ci-dessus fonctionne sur une forme carrée pivotée de 45 degrés. Notez que le coin supérieur gauche du cadre de délimitation est fixe lors de la mise à l'échelle.
Réflexion le long du bord
L'argument dans scaleWidth()
et scaleHeight()
peut être négatif afin qu'il puisse être utilisé pour retourner un élément de page horizontalement ou verticalement.
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.
La figure ci-dessous montre comment le code ci-dessus fonctionne sur une forme pivotée de 45 degrés. Notez que l'élément de page est inversé le long de l'un des bords de son cadre de délimitation, mais pas au centre.
Rotation des lignes
Comme pour les autres éléments de page, la rotation d'une ligne ne correspond pas à l'angle vertical de la ligne, mais à la rotation de sa zone de délimitation. Lorsque vous créez une ligne avec des points de départ et d'arrivée spécifiés, sa rotation est toujours de 0°. Faire glisser les points de fin de la ligne dans l'interface utilisateur de Google Slides modifie son angle vertical, ainsi que la taille et la position de sa zone de délimitation, mais pas sa rotation. L'utilisation de setRotation()
fait pivoter la zone de délimitation de la ligne, ce qui modifie effectivement son angle vertical. Ainsi, deux lignes peuvent avoir le même angle vertical visuel, mais des rectangles de délimitation différents et donc des valeurs de taille, de position et de rotation différentes.
Limites
Certaines méthodes de dimensionnement et de positionnement ne sont pas compatibles avec certains types d'éléments de page. Le tableau ci-dessous récapitule les méthodes qui ne sont pas compatibles avec certains types d'éléments de page.
Méthodes | Forme | Vidéo | Tableau |
---|---|---|---|
getHeight(), getWidth() | ✔ | ✔ | NON (renvoie la valeur nulle) |
setHeight(), setWidth() | ✔ | ✔ | NON |
setRotation() | ✔ | NON | NON |
scaleHeight(), scaleWidth() | ✔ | ✔ | NON |
Toutes les méthodes de dimensionnement et de positionnement peuvent donner des résultats inattendus si l'élément de page est déformé. Toutes les restrictions sont susceptibles d'être modifiées. Consultez la documentation de référence pour obtenir des informations à jour.
Utiliser des transformations affines
Pour un contrôle avancé, la taille et la position d'un élément de page peuvent également être calculées et ajustées via sa taille inhérente (native) et sa transformation affine.
Google Apps Script fournit une interface similaire à celle de l'API Google Slides pour utiliser la transformation affine.
- Cet article explique les concepts de transformation affine et comment inférer la taille affichée à partir de la taille inhérente (native) et de la transformation pour les éléments de page. Dans Apps Script, utilisez :
getInherentWidth()
etgetInherentHeight()
pour la taille native des éléments de page ;getTransform()
pour la transformation affine des éléments de la page.
- Pour écrire, cet article explique comment dimensionner et positionner les éléments de page à l'aide d'une transformation affine pour effectuer un étalonnage, une rotation, une réflexion, etc. Dans Apps Script, utilisez
setTransform()
pour définir la transformation affine des éléments de la page (similaire au mode ABSOLUTE) ;preconcatenateTransform()
pour pré-concaténer une transformation affine à la transformation actuelle des éléments de page (similaire au mode RELATIF).
Le script suivant crée une forme, définit sa transformation, lit sa taille inhérente et lit sa transformation affine.
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.');
La sortie du journal attendue de ce script est la suivante:
Inherent width: 236.2pt; Inherent height: 236.2pt.
La forme obtenue aura la transformation suivante, ainsi que la taille et la position affichées:
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°.