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

Bạn có thể lấy và thay đổi kích thước cũng như vị trí của một phần tử trang theo 2 cách:

  1. Sử dụng các hàm getter và setter cho kích thước và vị trí.
  2. Chỉnh sửa phép biến đổi affin, 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ư minh hoạ trong hình, kích thước và vị trí được đo theo hộp giới hạn của 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 tới 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ị.
  • Width (Chiều rộng) và Height (Chiều rộng): 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ồ đối với đường dọc xung quanh tâm 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à độ 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 phần tử đó.

Khi tạo

Bạn có thể cung cấp thông tin về vị trí và kích thước khi tạo một 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 và đọc thông tin 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à 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í ở góc trên bên trái của hộp giới hạn chưa xoay.
  • Sử dụng setWidth()setHeight() để đặt chiều rộng và chiều cao được kết xuất của hộp giới hạn.
  • Sử dụng setRotation() để đặt hộp giới hạn xoay theo chiều kim đồng hồ quanh tâm của hộp.

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

Đầu ra 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ể dùng các phương thức setter kích thước, vị trí và xoay theo bất kỳ thứ tự hoặc tổ hợp nào. Thay thế dòng thứ ba ở trên bằng tập lệnh sau sẽ tạo 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 dài hoặc ép một phần tử trang với hệ số tỷ lệ tương đối.

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

Hình dưới đây mô tả cách mã ở trên hoạt động trên một 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 điều chỉnh theo tỷ lệ.

Điều chỉnh tỷ lệ trang trình bày

Phản chiếu dọc theo cạnh

Đối số trong scaleWidth()scaleHeight() có thể mang giá trị âm để có thể dùng nhằm lật mộ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 dưới đây mô tả cách mã ở trên hoạt động trên hình dạng xoay 45°. 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 nằm ở giữa phần tử.

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

Xoay đường kẻ

Giống như các phần tử trang khác, độ xoay của đường kẻ không phải là góc dọc của đường thẳng, mà là độ xoay hộp giới hạn của đường thẳng. Khi bạn tạo một đường có điểm bắt đầu và điểm kết thúc được chỉ định, độ 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 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 làm thay đổi độ xoay của đường đó. Việc sử dụng setRotation() xoay hộp giới hạn của đường kẻ, giúp thay đổi góc dọc một cách hiệu quả. Vì vậy, hai đường có thể có cùng góc dọc, nhưng có các hộp giới hạn khác nhau và do đó có các giá trị kích thước, vị trí và độ 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ả cá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

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

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

  • Để đọc, bài viết này giải thích các khái niệm về biến đổi affin và cách dự đoán kích thước kết xuất 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 affine 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 phép biến đổi affin để đạt được tỷ lệ đ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 affin của các phần tử trang (tương tự như chế độ duy nhất);
    • preconcatenateTransform() để nối trước một phép biến đổi affin thành hành động biến đổi hiện tại của các thành phần trang (tương tự như chế độ RELATIVE).

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

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

Đầu ra 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°.