Cách Thêm Hình Dạng vào PowerPoint trong Java

Cách Thêm Hình Dạng vào PowerPoint trong Java

Aspose.Slides FOSS for Java hỗ trợ thêm AutoShapes, Tables, Connectors và PictureFrames vào các slide trình chiếu. Tất cả các loại hình dạng đều được thêm thông qua bộ sưu tập slide.getShapes().

Hướng Dẫn Từng Bước

Bước 1: Thêm phụ thuộc Maven

<dependency>
  <groupId>org.aspose.slides.foss</groupId>
  <artifactId>aspose-slides-foss</artifactId>
  <version>1.0.0</version>
</dependency>

Bước 2: Tạo bản trình chiếu

Luôn sử dụng try-with-resources để quản lý tài nguyên.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);
    // ... add shapes ...
    prs.save("output.pptx", SaveFormat.PPTX);
}

Bước 3: Thêm AutoShape

slide.getShapes().addAutoShape(shapeType, x, y, width, height) đặt một hình dạng tại vị trí và kích thước đã cho (tất cả tính bằng điểm). Sử dụng các hằng số ShapeType để chọn hình dạng.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    // Rectangle
    IAutoShape rect = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 300, 100
    );
    rect.addTextFrame("Rectangle shape");

    // Ellipse
    IAutoShape ellipse = slide.getShapes().addAutoShape(
        ShapeType.ELLIPSE, 400, 50, 200, 100
    );
    ellipse.addTextFrame("Ellipse shape");

    prs.save("autoshapes.pptx", SaveFormat.PPTX);
}

Bước 4: Thêm bảng

slide.getShapes().addTable(x, y, colWidths, rowHeights) tạo một bảng tại vị trí được chỉ định. Độ rộng cột và chiều cao hàng là các mảng giá trị điểm.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    double[] colWidths = {150.0, 150.0, 150.0};
    double[] rowHeights = {40.0, 40.0, 40.0};
    ITable table = slide.getShapes().addTable(50, 200, colWidths, rowHeights);

    // Set header row text
    String[] headers = {"Product", "Units", "Revenue"};
    for (int col = 0; col < headers.length; col++) {
        table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
    }

    // Set data rows
    String[][] rows = {
        {"Widget A", "120", "$2,400"},
        {"Widget B", "85", "$1,700"},
    };
    for (int row = 0; row < rows.length; row++) {
        for (int col = 0; col < rows[row].length; col++) {
            table.getRows().get(row + 1).get(col)
                .getTextFrame().setText(rows[row][col]);
        }
    }

    prs.save("table.pptx", SaveFormat.PPTX);
}

Bước 5: Thêm một Connector

Các kết nối liên kết hai hình dạng một cách trực quan. Đầu tiên tạo các hình dạng, sau đó thêm một kết nối và đặt các điểm kết nối đầu và cuối của nó.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);

    IAutoShape box1 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 100, 150, 60
    );
    box1.addTextFrame("Start");

    IAutoShape box2 = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 350, 100, 150, 60
    );
    box2.addTextFrame("End");

    IConnector conn = slide.getShapes().addConnector(
        ShapeType.BENT_CONNECTOR3, 0, 0, 10, 10
    );
    conn.setStartShapeConnectedTo(box1);
    conn.setStartShapeConnectionSiteIndex(3);  // right side of box1
    conn.setEndShapeConnectedTo(box2);
    conn.setEndShapeConnectionSiteIndex(1);    // left side of box2

    prs.save("connector.pptx", SaveFormat.PPTX);
}

Các chỉ số vị trí kết nối được đánh số 0-3 cho một hình chữ nhật: trên=0, trái=1, dưới=2, phải=3.


Bước 6: Thêm khung ảnh

Nhúng một hình ảnh và thêm nó vào slide dưới dạng PictureFrame. Đọc dữ liệu byte của hình ảnh trước, thêm chúng vào bộ sưu tập hình ảnh của bản trình chiếu, sau đó tạo khung.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.IConnector;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.IPPImage;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.export.SaveFormat;
import java.nio.file.Files;
import java.nio.file.Paths;

try (Presentation prs = new Presentation()) {
    byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
    IPPImage image = prs.getImages().addImage(imageData);

    ISlide slide = prs.getSlides().get(0);
    slide.getShapes().addPictureFrame(
        ShapeType.RECTANGLE,  // bounding shape type
        50, 50,               // x, y in points
        200, 150,             // width, height in points
        image
    );

    prs.save("with-image.pptx", SaveFormat.PPTX);
}

Các vấn đề thường gặp và cách khắc phục

Hình dạng xuất hiện ngoài khu vực slide có thể nhìn thấy

Slides mặc định có kích thước 720 x 540 điểm. Giá trị của x hoặc y vượt ra ngoài giới hạn đó sẽ đặt hình dạng ra ngoài slide. Giữ x < 720y < 540, và đảm bảo x + width <= 720y + height <= 540.

NullPointerException khi đọc văn bản hình dạng

addAutoShape() trả về đối tượng shape trực tiếp. Nếu bạn thấy null, hãy kiểm tra rằng bạn không bỏ qua giá trị trả về. Cũng hãy xác minh getTextFrame() không phải null trước khi đọc văn bản.

Nội dung ô bảng trống sau khi gán

Phương pháp đúng là .getTextFrame().setText(value). Truy cập các ô như table.getRows().get(rowIndex).get(colIndex).getTextFrame().setText("value").


Câu hỏi thường gặp

Tôi có thể thêm bao nhiêu hình dạng vào một slide?

Không có giới hạn do thư viện áp đặt. Giới hạn thực tế phụ thuộc vào kích thước tệp và khả năng hiển thị của trình xem PPTX mục tiêu của bạn.

Có thể thay đổi vị trí của một hình dạng sau khi thêm nó không?

Có. Đối tượng shape được trả về bởi addAutoShape() có các thuộc tính vị trí và kích thước thông qua getShapeFrame().

Biểu đồ có được hỗ trợ không?

Không. Biểu đồ, SmartArt và các đối tượng OLE không được triển khai trong phiên bản này và gây ra UnsupportedOperationException.


Xem thêm

 Tiếng Việt