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

Có hai cách khác nhau để bạn có thể nhận và thay đổi kích thước cũng như vị trí của 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ư được thể hiện 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 không có chế độ 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 đứng 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 theo độ (°).

Đặ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 bạn tạo phần tử đó bằng cách sử dụng một 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ử thành đổi kích thước hoặc phản ánh vị trí dọc theo một trong các cạnh của hình ảnh đó.

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 tạo ra 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 có vị trí và kích thước đã chỉ định, đồng thời đọ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à 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í 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 của đường viền .
  • Dùng setRotation() để đặt chế độ xoay theo chiều kim đồng hồ của hộp giới hạn xung quanh giữa chiến dịch.

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 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 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 theo 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 nên chúng có thể được dù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°. Lưu ý rằng phần tử trang bị lật dọc theo một trong các cạnh của hộp giới hạn nhưng không trung tâm của thiết bị.

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 thẳng mà còn xoay vòng giới hạn của nó. Khi bạn tạo một đường bằng điểm xuất phát và điểm kết thúc đã chỉ định, góc xoay của điểm đó luôn bằng 0°. 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 cũng thay đổi góc thẳng đứ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 màn hình. Việc sử dụng setRotation() sẽ xoay hộp giới hạn của đường kẻ thay đổi hiệu quả góc thẳng đứng. Vì vậy, hai dòng có thể có cùng góc nhìn dọc, nhưng các hộp giới hạn khác nhau và do đó kích thước, vị trí và giá trị 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 trang phần tử. 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
setRotation() KHÔNG KHÔNG
scaleHeight(), scaleWidth() KHÔNG

Tất cả phương thức định kích thước và định vị có thể cung cấp kết quả không mong muốn nếu trang có tính cắt. Tất cả các giới hạn có thể thay đổi. Kiểm tra tài liệu tham khảo cho cập nhật thông tin.

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ể là được tính toán và điều chỉnh thông qua kích thước vốn có (gốc) và biến đổi affin.

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

  • Để đọc, article giải thích các khái niệm biến đổi affine và cách suy ra kích thước được kết xuất từ giá trị 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 trang các phần tử;
    • getTransform() để biến đổi affin của các phần tử trang.
  • Để viết, article 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 điều chỉnh 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ế độ TUYỆT ĐỐI);
    • preconcatenateTransform() để nối 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, thiết lập sự biến đổi của hình dạng, đọc kích thước vốn có của nó, 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.');

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