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:
- Sử dụng các hàm getter và setter cho kích thước và vị trí.
- Chỉnh sửa phép biến đổi affin, sử dụng các hàm
getTransform()
vàsetTransform()
mà vẫn giữ nguyên kích thước vốn có.
Đọc thuộc tính phần tử trang
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ái và Trê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()
và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()
và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()
và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()
và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()
và 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()
và 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ệ.
Phản chiếu dọc theo cạnh
Đối số trong scaleWidth()
và 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ử.
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()
và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°.