Cách Tạo Bản Trình Chiếu trong Java

Cách Tạo Bản Trình Chiếu trong Java

Aspose.Slides FOSS for Java cho phép bạn tạo các bài thuyết trình PowerPoint hoàn toàn bằng Java mà không phụ thuộc vào Microsoft Office. Hướng dẫn này cho thấy cách tạo một bài thuyết trình mới, thêm các slide và hình dạng, định dạng văn bản và lưu kết quả.

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

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

Thêm Aspose.Slides FOSS vào pom.xml của bạn. Yêu cầu Java 21 trở lên.

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

Xác minh việc cài đặt:

import org.aspose.slides.foss.Presentation;

Presentation prs = new Presentation();
prs.dispose();
System.out.println("Aspose.Slides FOSS ready");

Bước 2: Nhập các lớp cần thiết

Nhập lớp Presentation và enum SaveFormat cần thiết để lưu.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;

Tất cả các hằng số kiểu hình dạng nằm trong org.aspose.slides.foss.ShapeType. Các enum định dạng (FillType, NullableBool) cũng nằm trong org.aspose.slides.foss.


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

Sử dụng new Presentation() và bao bọc nó trong try-with-resources. Một bản trình bày mới bắt đầu với một slide trống.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.export.SaveFormat;

try (Presentation prs = new Presentation()) {
    System.out.println("Slides in new presentation: " + prs.getSlides().size());
    prs.save("output.pptx", SaveFormat.PPTX);
}

Quan trọng: Luôn sử dụng try-with-resources hoặc gọi prs.dispose() trong khối finally. Nếu không, tài nguyên sẽ không được giải phóng đúng cách.


Bước 4: Truy cập một Slide

Slide đầu tiên có chỉ mục 0. Một bản trình bày trống có đúng một slide.

try (Presentation prs = new Presentation()) {
    ISlide slide = prs.getSlides().get(0);  // zero-based index
    System.out.println("Slide at index 0: " + slide);
    prs.save("output.pptx", SaveFormat.PPTX);
}

Bước 5: Thêm một Hình

Sử dụng slide.getShapes().addAutoShape() để thêm một AutoShape. Các tham số là (shapeType, x, y, width, height), tất cả tính bằng điểm (1 điểm = 1/72 inch; slide tiêu chuẩn là 720 x 540 pt).

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

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

    // Rectangle at (50, 50) with 400 wide and 120 tall
    IAutoShape shape = slide.getShapes().addAutoShape(
        ShapeType.RECTANGLE, 50, 50, 400, 120
    );

    // Attach a text frame
    shape.addTextFrame("Hello from Aspose.Slides FOSS!");

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

Bước 6: Lưu bản trình chiếu

Gọi prs.save(path, SaveFormat.PPTX) trước khi khối try kết thúc. PPTX là định dạng đầu ra duy nhất được hỗ trợ.

prs.save("result.pptx", SaveFormat.PPTX);

Tệp được ghi một cách nguyên tử; nếu có lỗi xảy ra trước cuộc gọi này, sẽ không tạo ra tệp đầu ra.


Ví dụ Hoạt động Đầy đủ

Chương trình sau tạo một bản trình bày gồm hai slide, với một hình dạng tiêu đề trên slide đầu tiên và một bảng trên slide thứ hai.

import org.aspose.slides.foss.Presentation;
import org.aspose.slides.foss.ISlide;
import org.aspose.slides.foss.IAutoShape;
import org.aspose.slides.foss.ITextFrame;
import org.aspose.slides.foss.IPortionFormat;
import org.aspose.slides.foss.ITable;
import org.aspose.slides.foss.ILayoutSlide;
import org.aspose.slides.foss.ShapeType;
import org.aspose.slides.foss.FillType;
import org.aspose.slides.foss.NullableBool;
import org.aspose.slides.foss.export.SaveFormat;
import org.aspose.slides.foss.drawing.Color;

public class CreatePresentation {
    public static void main(String[] args) {
        try (Presentation prs = new Presentation()) {
            // --- Slide 1: title shape ---
            ISlide slide1 = prs.getSlides().get(0);
            IAutoShape title = slide1.getShapes().addAutoShape(
                ShapeType.RECTANGLE, 40, 40, 640, 80
            );
            ITextFrame tf = title.addTextFrame("Q1 Results: Executive Summary");
            IPortionFormat fmt = tf.getParagraphs().get(0)
                .getPortions().get(0).getPortionFormat();
            fmt.setFontHeight(32);
            fmt.setFontBold(NullableBool.TRUE);
            fmt.getFillFormat().setFillType(FillType.SOLID);
            fmt.getFillFormat().getSolidFillColor().setColor(
                Color.fromArgb(255, 0, 70, 127)
            );

            // --- Slide 2: table ---
            prs.getSlides().addEmptySlide(prs.getLayoutSlides().get(0));
            ISlide slide2 = prs.getSlides().get(1);
            ITable table = slide2.getShapes().addTable(
                40, 40,
                new double[]{200.0, 120.0, 120.0},
                new double[]{40.0, 40.0, 40.0}
            );
            String[] headers = {"Region", "Revenue", "Growth"};
            String[][] data = {
                {"North", "$1.2M", "+8%"},
                {"South", "$0.9M", "+4%"},
            };
            for (int col = 0; col < headers.length; col++) {
                table.getRows().get(0).get(col).getTextFrame().setText(headers[col]);
            }
            for (int row = 0; row < data.length; row++) {
                for (int col = 0; col < data[row].length; col++) {
                    table.getRows().get(row + 1).get(col)
                        .getTextFrame().setText(data[row][col]);
                }
            }

            prs.save("q1-results.pptx", SaveFormat.PPTX);
        }
        System.out.println("Saved q1-results.pptx");
    }
}

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

IllegalStateException: Presentation already disposed

Bạn đang gọi các phương thức trên một đối tượng Presentation sau khi khối try-with-resources đã kết thúc. Luôn giữ mọi công việc bên trong khối try.

UnsupportedOperationException khi lưu

Điều này xảy ra khi cố gắng lưu ở định dạng khác PPTX, hoặc khi sử dụng tính năng không được hỗ trợ (chẳng hạn như biểu đồ hoặc hoạt ảnh).

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

Các slide có kích thước mặc định là 720 x 540 điểm. Giữ x + width <= 720y + height <= 540.


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

Kích thước slide mặc định là gì?

Một Presentation() mới tạo các slide với kích thước tiêu chuẩn 10 x 7,5 inch (720 x 540 điểm). Việc thay đổi kích thước slide chưa được hỗ trợ trong phiên bản này.

Tôi có thể thêm hơn một slide không?

Có. Gọi prs.getSlides().addEmptySlide(prs.getLayoutSlides().get(0)) để thêm một slide trống và truy cập nó theo chỉ mục:

prs.getSlides().addEmptySlide(prs.getLayoutSlides().get(0));
ISlide slide2 = prs.getSlides().get(1);

Tôi có thể mở một tệp hiện có và thêm các slide không?

Có:

try (Presentation prs = new Presentation("existing.pptx")) {
    prs.getSlides().addEmptySlide(prs.getLayoutSlides().get(0));
    prs.save("existing.pptx", SaveFormat.PPTX);
}

Tôi có thể lưu thành những định dạng nào?

Chỉ hỗ trợ SaveFormat.PPTX. Xuất ra PDF, HTML, SVG hoặc hình ảnh không khả dụng trong phiên bản này.


Xem thêm

 Tiếng Việt