Как создавать презентации на Java

Как создавать презентации на Java

Aspose.Slides FOSS for Java позволяет создавать презентации PowerPoint полностью на Java без зависимости от Microsoft Office. Это руководство показывает, как создать новую презентацию, добавить слайды и фигуры, отформатировать текст и сохранить результат.

Пошаговое руководство

Шаг 1: Добавьте зависимость Maven

Добавьте Aspose.Slides FOSS в ваш pom.xml. Требуется Java 21 или новее.

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

Проверьте установку:

import org.aspose.slides.foss.Presentation;

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

Шаг 2: Импортировать необходимые классы

Импортируйте класс Presentation и перечисление SaveFormat, необходимые для сохранения.

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;

Все константы типов фигур находятся в org.aspose.slides.foss.ShapeType. Перечисления форматирования (FillType, NullableBool) также находятся в org.aspose.slides.foss.


Шаг 3: Создать презентацию

Используйте new Presentation() и оберните его в try-with-resources. Новая презентация начинается с одного пустого слайда.

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);
}

Важно: Всегда используйте try-with-resources или вызывайте prs.dispose() в блоке finally. В противном случае ресурсы не будут освобождены корректно.


Шаг 4: Доступ к слайду

Первый слайд находится в индексе 0. Пустая презентация содержит ровно один слайд.

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);
}

Шаг 5: Добавить форму

Используйте slide.getShapes().addAutoShape(), чтобы добавить AutoShape. Параметры (shapeType, x, y, width, height) указаны в пунктах (1 пункт = 1/72 дюйма; стандартный слайд — 720 × 540 пунктов).

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);
}

Шаг 6: Сохранить презентацию

Вызовите prs.save(path, SaveFormat.PPTX) до выхода из блока try. PPTX — единственный поддерживаемый формат вывода.

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

Файл записывается атомарно; если ошибка происходит до этого вызова, файл вывода не создаётся.


Полный рабочий пример

Следующая программа создает презентацию из двух слайдов с фигурой заголовка на первом слайде и таблицей на втором.

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");
    }
}

Распространённые проблемы и решения

IllegalStateException: Presentation already disposed

Вы вызываете методы у объекта Presentation после выхода из блока try-with-resources. Всегда держите всю работу внутри блока try.

UnsupportedOperationException при сохранении

Это происходит при попытке сохранить в формате, отличном от PPTX, или при использовании неподдерживаемой функции (например, диаграмм или анимаций).

Фигура находится за пределами видимой области слайда

Слайды по умолчанию имеют размер 720 × 540 пунктов. Сохраните x + width <= 720 и y + height <= 540.


Часто задаваемые вопросы

Какой размер слайда по умолчанию?

Новый Presentation() создает слайды стандартного размера 10 × 7,5 дюйма (720 × 540 пунктов). Изменение размера слайда пока не поддерживается в этом издании.

Могу ли я добавить более одного слайда?

Да. Вызовите prs.getSlides().addEmptySlide(prs.getLayoutSlides().get(0)), чтобы добавить пустой слайд и получить к нему доступ по индексу:

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

Могу ли я открыть существующий файл и добавить слайды?

Да:

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

В какие форматы я могу сохранять?

Поддерживается только SaveFormat.PPTX. Экспорт в PDF, HTML, SVG или изображения недоступен в этой версии.


См. также

 Русский