Định kích thước và định vị các phần tử trang

Có hai cách để bạn tải và thay đổi kích thước cũng như vị trí của một phần tử trang:

  1. Sử dụng các hàm getter và setter để xác định kích thước và vị trí.
  2. Điều chỉnh phép biến đổi affine, sử dụng các hàm getTransform()setTransform() mà vẫn giữ nguyên kích thước vốn có.

Đọc thuộc tính phần tử trang

Định cỡ và xoay

Như trong hình, kích thước và vị trí được đo lường theo hộp giới hạn của một phần tử trang được kết xuất khi phần tử đó không xoay:

  • TráiTrên cùng: được đo từ góc trên bên trái của trang đến góc trên bên trái của hộp giới hạn không xoay. Sử dụng getLeft()getTop() để đọc các giá trị.
  • Chiều rộngChiều cao: chiều rộng và chiều cao của hộp giới hạn không xoay. Sử dụng getWidth()getHeight() để đọc các giá trị.
  • Xoay: xoay theo chiều kim đồng hồ so với đường thẳng dọc xung quanh tâm của hộp giới hạn. Sử dụng getRotation() để đọc giá trị.

Tất cả độ dài được tính bằng điểm (pt). Độ xoay được đo bằng độ (°).

Đặt thuộc tính phần tử trang

Bạn có thể đặt kích thước và vị trí của một phần tử trang khi tạo phần tử đó bằng phương thức chèn như insertShape(). Đối với hình dạng hiện có, bạn có thể đặt kích thước, vị trí và chế độ xoay; bạn cũng có thể đặt tỷ lệ của một phần tử để đổi kích thước hoặc phản ánh phần tử đó dọc theo một trong các cạnh của hình dạng đó.

Khi tạo

Bạn có thể cung cấp thông tin về vị trí và kích thước khi tạo phần tử trang.

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

Tập lệnh ở trên sẽ tạo một hình dạng trên trang trình bày đầu tiên của bản trình bày đang hoạt động với vị trí và kích thước đã chỉ định, đồng thời đọc thông tin về vị trí và kích thước của hình dạng. Nhật ký dự kiến là:

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

Kích thước, vị trí và chế độ xoay

Bạn có thể cập nhật kích thước và vị trí của một phần tử trang sau khi tạo:

  • Sử dụng setLeft()setTop() để đặt vị trí của góc trên bên trái của hộp giới hạn không xoay.
  • Sử dụng setWidth()setHeight() để đặt chiều rộng và chiều cao được kết xuất cho hộp giới hạn.
  • Dùng setRotation() để đặt chế độ xoay theo chiều kim đồng hồ của hộp giới hạn xung quanh tâm.

Tập lệnh sau đây sẽ tạo một hình dạng trên trang trình bày đầu tiên của bản trình bày đang hoạt động, sử dụng phương thức setter để cập nhật vị trí, kích thước và chế độ xoay, đồng thời đọc thông tin về vị trí và kích thước của hình dạng.

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

Kết quả nhật ký dự kiến từ tập lệnh này như sau:

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

Bạn có thể sử dụng phương thức setter về kích thước, vị trí và phương thức xoay theo bất kỳ thứ tự hoặc cách kết hợp nào. Thay thế dòng thứ ba ở trên bằng tập lệnh sau sẽ cho ra kết quả tương tự:

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

Chuyển tỷ lệ

Thay vì sử dụng setWidth()setHeight() ở trên để đặt kích thước của hình dạng thành một giá trị tuyệt đối, bạn có thể sử dụng scaleWidth()scaleHeight() để kéo giãn hoặc ép một phần tử trang có hệ số tỷ lệ tương đối.

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

Hình bên dưới mô tả cách mã phía trên hoạt động trên hình vuông xoay 45°. Lưu ý rằng góc trên bên trái của hộp giới hạn được cố định trong khi chuyển tỷ lệ.

Chuyển tỷ lệ trang trình bày

Hình bóng phản chiếu dọc theo cạnh

Đối số trong scaleWidth()scaleHeight() có thể mang giá trị âm để bạn có thể dùng chúng để lật phần tử trang theo chiều ngang hoặc chiều dọc.

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.

Hình bên dưới mô tả cách mã trên hoạt động trên hình dạng xoay 45°. Xin lưu ý rằng phần tử trang được lật dọc theo một trong các cạnh của hộp giới hạn nhưng không phải ở giữa.

Phản chiếu trên Trang trình bày

Xoay đường kẻ

Giống như các thành phần khác của trang, độ xoay của đường kẻ không phải là góc dọc của đường kẻ mà là góc xoay của hộp giới hạn. Khi bạn tạo một đường thẳng có điểm bắt đầu và điểm kết thúc được chỉ định, hướng xoay của đường thẳng đó luôn là 0°. Việc kéo các điểm cuối của đường trong giao diện người dùng của Google Trang trình bày sẽ thay đổi góc dọc cũng như kích thước và vị trí của hộp giới hạn nhưng không thay đổi độ xoay của đường đó. Việc sử dụng setRotation() sẽ xoay hộp giới hạn của đường kẻ, giúp thay đổi góc dọc của đường một cách hiệu quả. Vì vậy, hai đường có thể có cùng một góc dọc trực quan, nhưng các hộp giới hạn khác nhau, do đó, có các giá trị kích thước, vị trí và chế độ xoay khác nhau.

Các điểm hạn chế

Một số phương thức định kích thước và định vị không tương thích với một số loại phần tử trang. Bảng dưới đây tóm tắt các phương thức không tương thích với một số loại phần tử trang nhất định.

Phương thức Hình dạng Video Bảng
getHeight(), getWidth() NO (trả về giá trị rỗng)
setHeight(), setWidth() KHÔNG NÊN
setRotation() KHÔNG NÊN KHÔNG NÊN
scaleHeight(), scaleWidth() KHÔNG NÊN

Tất cả phương thức định kích thước và định vị có thể cho kết quả không mong muốn nếu phần tử trang bị cắt. Tất cả các giới hạn có thể thay đổi. Hãy xem tài liệu tham khảo để biết thông tin mới nhất.

Sử dụng phép biến đổi affin

Để kiểm soát nâng cao, bạn cũng có thể tính toán và điều chỉnh kích thước và vị trí của một phần tử trang thông qua kích thước vốn có (gốc) và biến đổi affine.

Google Apps Script cung cấp giao diện tương tự để sử dụng tính năng biến đổi affine dưới dạng API Google Trang trình bày.

  • Để giúp bạn đọc hiểu thêm, bài viết này giải thích các khái niệm về phép biến đổi affine và cách suy luận kích thước được hiển thị từ kích thước vốn có (gốc) và biến đổi cho các phần tử trang. Trong Apps Script, hãy sử dụng
    • getInherentWidth()getInherentHeight() cho kích thước gốc của các phần tử trang;
    • getTransform() để biến đổi affin của các phần tử trang.
  • Để viết, bài viết này mô tả cách định kích thước và định vị các phần tử trang bằng cách sử dụng phép biến đổi affine để đạt được việc điều chỉnh theo tỷ lệ, xoay, phản chiếu, v.v. Trong Apps Script, hãy sử dụng
    • setTransform() để đặt biến đổi affine của các phần tử trang (tương tự như chế độ TUYỆT ĐỐI);
    • preconcatenateTransform() để liên kết trước một phép biến đổi affine với biến đổi hiện tại của các phần tử trang (tương tự như chế độ RELATIVE).

Tập lệnh sau đây tạo ra một hình dạng, đặt biến đổi của hình dạng, đọc kích thước vốn có của hình dạng và đọc biến đổi affin của hình dạng đó.

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

Kết quả nhật ký dự kiến từ tập lệnh này như sau:

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

Hình dạng thu được sẽ có sự biến đổi, cũng như kích thước và vị trí được kết xuất như sau:

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