Dimensioni e posizione degli elementi della pagina

Esistono due modi diversi per ottenere e modificare le dimensioni e la posizione di un elemento di pagina:

  1. Utilizzando le funzioni getter e setter per le dimensioni e la posizione.
  2. Manipolando la trasformazione affine, utilizzando le funzioni getTransform() e setTransform() mantenendo le dimensioni intrinseche.

Leggere le proprietà degli elementi di pagina

Ridimensionamento e rotazione

Come mostrato nella figura, le dimensioni e la posizione vengono misurate rispetto al riquadro di delimitazione di un elemento di pagina sottoposto a rendering quando non ha rotazione:

  • Left e Top: misurate dall'angolo in alto a sinistra della pagina all' angolo in alto a sinistra del riquadro di delimitazione non ruotato. Utilizza getLeft() e getTop() per leggere i valori.
  • Width e Height: la larghezza e l'altezza del riquadro di delimitazione non ruotato. Utilizza getWidth() e getHeight() per leggere i valori.
  • Rotazione: la rotazione in senso orario rispetto alla linea verticale attorno a l centro del riquadro di delimitazione. Utilizza getRotation() per leggere il valore.

Tutte le lunghezze sono misurate in punti (pt). La rotazione viene misurata in gradi (°).

Impostare le proprietà degli elementi di pagina

Imposta le dimensioni e la posizione di un elemento di pagina quando lo crei utilizzando un metodo di inserimento come insertShape(). Per una forma esistente, puoi impostare le dimensioni, la posizione e la rotazione; puoi anche impostare la scalabilità di un elemento per ridimensionarlo o rifletterlo lungo uno dei suoi bordi.

Al momento della creazione

Fornisci informazioni sulla posizione e sulle dimensioni quando crei un elemento di pagina.

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.');

Lo script precedente crea una forma sulla prima slide della presentazione attiva con la posizione e le dimensioni specificate e legge le informazioni sulla posizione e sulle dimensioni della forma. Il log previsto è:

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

Dimensioni, posizione e rotazione

Aggiorna le dimensioni e la posizione di un elemento di pagina dopo la creazione:

  • Utilizza setLeft() e setTop() per impostare la posizione dell'angolo in alto a sinistra del riquadro di delimitazione non ruotato.
  • Utilizza setWidth() e setHeight() per impostare la larghezza e l'altezza sottoposte a rendering del riquadro di delimitazione.
  • Utilizza setRotation() per impostare la rotazione in senso orario del riquadro di delimitazione attorno al suo centro.

Lo script seguente crea una forma sulla prima slide della presentazione attiva, utilizza i setter per aggiornarne la posizione, le dimensioni e la rotazione e legge le informazioni sulla posizione e sulle dimensioni della forma.

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.');

Il log previsto è:

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

I setter di dimensioni, posizione e rotazione possono essere utilizzati in qualsiasi ordine o combinazione. Se sostituisci la terza riga dello script precedente con lo script seguente, otterrai lo stesso risultato:

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

Scalare un elemento di pagina

Anziché utilizzare setWidth() e setHeight() per impostare le dimensioni della forma su un valore assoluto, puoi utilizzare scaleWidth() e scaleHeight() per allungare o comprimere un elemento di pagina con un fattore di scalabilità relativo.

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

La figura seguente mostra come funziona il codice precedente su una forma quadrata ruotata di 45°. Tieni presente che l'angolo in alto a sinistra del riquadro di delimitazione è fisso durante la scalabilità.

Scalabilità delle slide

Riflettere un elemento di pagina

L'argomento in scaleWidth() e scaleHeight() può essere negativo, in modo che possa essere utilizzato per capovolgere un elemento di pagina orizzontalmente o verticalmente.

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

La figura seguente mostra come funziona il codice precedente su una forma ruotata di 45°. Tieni presente che l'elemento di pagina viene capovolto lungo uno dei bordi del riquadro di delimitazione, ma non al centro.

Riflessione su Presentazioni

Rotazione della linea

Come altri elementi di pagina, la rotazione di una linea non è l'angolo verticale della linea, ma la rotazione del relativo riquadro di delimitazione. Quando crei una linea con punti di inizio e fine specificati, la sua rotazione è sempre di 0°. Se trascini i punti finali della linea nell'interfaccia utente di Presentazioni, ne modifichi l'angolo verticale, nonché le dimensioni e la posizione del riquadro di delimitazione, ma non la rotazione. L'utilizzo di setRotation() ruota il riquadro di delimitazione della linea, modificandone di fatto l'angolo verticale. Pertanto, due linee possono avere lo stesso angolo verticale visivo, ma riquadri di delimitazione diversi e quindi valori di dimensioni, posizione e rotazione diversi.

Limitazioni

Alcuni metodi di dimensionamento e posizionamento non sono compatibili con alcuni tipi di elementi di pagina. La tabella seguente riassume i metodi non compatibili con determinati tipi di elementi di pagina.

Metodi Forma Video Tabella
getHeight(), getWidth() NO (restituisce null)
setHeight(), setWidth() NO
setRotation() NO NO
scaleHeight(), scaleWidth() NO

Tutti i metodi di dimensionamento e posizionamento possono dare risultati imprevisti se l'elemento di pagina è inclinato. Tutte le limitazioni sono soggette a modifiche. Per informazioni aggiornate, consulta il riferimento.

Utilizzare le trasformazioni affini

Per un controllo avanzato, le dimensioni e la posizione di un elemento di pagina possono essere calcolate e regolate anche tramite le dimensioni intrinseche (native) e la trasformazione affine.

Google Apps Script fornisce un'interfaccia simile all'API Google Slides per l'utilizzo delle trasformazioni affini.

  • Per leggere le proprietà, puoi utilizzare una trasformazione affine, che descrive come un elemento viene scalato, ruotato, inclinato e posizionato. Per scoprire come utilizzare la trasformazione e le dimensioni intrinseche (native) di un elemento per calcolarne le dimensioni visive su una slide, consulta Trasformazioni. In Apps Script, utilizza:
    • getInherentWidth() e getInherentHeight() per le dimensioni intrinseche (native) degli elementi di pagina;
    • getTransform() per la trasformazione affine degli elementi di pagina.
  • Per modificare le proprietà, puoi utilizzare le trasformazioni affini per eseguire scalabilità, rotazione, riflessione e altro ancora. Per scoprire come dimensionare e posizionare gli elementi di pagina utilizzando le trasformazioni affini, consulta Dimensionamento e posizionamento. In Apps Script, utilizza:
    • setTransform() per impostare la trasformazione affine degli elementi di pagina (simile alla modalità ASSOLUTA);
    • preconcatenateTransform() per pre-concatenare una trasformazione affine alla trasformazione corrente degli elementi di pagina (simile alla modalità RELATIVA).

Lo script seguente crea una forma, ne imposta la trasformazione, ne legge le dimensioni intrinseche e ne legge la trasformazione 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.');

L'output del log previsto è:

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

La forma risultante ha la seguente trasformazione, dimensioni sottoposte a rendering e posizione:

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