JavaでPowerPointのプレゼンテーションを作成する方法

魅力のあるプレゼンテーションを作成することは、集中力を必要とする緻密な作業です。 完璧な仕上がりにするためには、図形のサイズや位置を変えたり、文字の色を変えたりするなど、常に細部の微調整を行う必要があります。 このため、手動でPowerPointのドキュメントを作成する方が、コードを使用するよりも効率的であることが多いのです。 しかし、場合によっては、プログラミングで行うこともあります。
この記事では、無料のSpire.Presentation for Javaを使って、**簡単なPowerPointプレゼンテーションを作成し**、**そこに基本要素（テキスト形状、画像形状、リスト、テーブルを含む）を挿入する方法**を学びます。Spire.Presentation for Javaは、JavaアプリケーションでPowerPointドキュメントを処理するための無料のクラスライブラリです。
> この記事の主な内容は、以下の部分を含みます。

- PowerPointドキュメントを作成する
- 最初のスライドを取得し、背景画像を設定する
- テキストを挿入する
- 画像を挿入する
- リストを挿入する
- 表を挿入する
- ドキュメントを保存する

## 【依存関係の追加】
> この方法は、無償のFree Spire.XLS for Javaが必要ですので、先にjarファイルをインポートしてください。
### 1. Maven
Maven を使用している場合、プロジェクトの pom.xml ファイルに以下のコードを追加することで、簡単にアプリケーションに JAR ファイルをインポートすることができます。
```XML
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.presentation.free</artifactId>
        <version>5.1.0</version>
    </dependency>
</dependencies>
```
### 2. 公式サイトよりJarファイルをダウンロード
まず、[Free Spire.XLS for Java](https://jp.e-iceblue.com/introduce/free-spire-presentation-for-java.html) の公式サイトよりzipファイルをダウンロードします。zipファイルを解凍し、libフォルダの下にあるSpire.Xls.jarファイルを依存関係としてプロジェクトにインポートしてください。
## 名前空間の導入
```Java
import com.spire.presentation.*;
import com.spire.presentation.drawing.*;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
```
## PowerPointドキュメントを作成する
```Java
//Presentationオブジェクトを作成する
Presentation presentation = new Presentation();
//スライドサイズの種類を設定する
presentation.getSlideSize().setType(SlideSizeType.SCREEN_16_X_9);
```
## 最初のスライドを取得し、背景画像を設定する
> 新しく作成されたPowerPointドキュメントには、あらかじめ空白のスライドが用意されています。

```Java
//最初のスライドを取得する
ISlide slide = presentation.getSlides().get(0);
//背景画像を設定する
String bgImage = "background.jpg";
BufferedImage image = ImageIO.read(new FileInputStream(bgImage));
IImageData imageData = slide.getPresentation().getImages().append(image);
slide.getSlideBackground().setType(BackgroundType.CUSTOM);
slide.getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);
slide.getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);
slide.getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(imageData);
```
## テキストを挿入する
```Java
//テキストを挿入する
Rectangle2D textBounds = new Rectangle2D.Float(50, 50, 440, 100);
IAutoShape textShape = slide.getShapes().appendShape(ShapeType.RECTANGLE, textBounds);
textShape.getFill().setFillType(FillFormatType.NONE);
textShape.getLine().setFillType(FillFormatType.NONE);
String text = "この記事では、Spire.Presentation for Javaを使用して、JavaでPowerPointドキュメントをゼロから作成する方法を紹介します。" +
        "この記事では、以下のような作業を行います。";
TextFont titleFont = new TextFont("Calibri (Body)");
textShape.getTextFrame().setText(text);
//テキストの書式を設定する
textShape.getTextFrame().getParagraphs().get(0).setAlignment(TextAlignmentType.LEFT);
PortionEx portionEx =  textShape.getTextFrame().getTextRange().getParagraph().getFirstTextRange();
portionEx.getFill().setFillType(FillFormatType.SOLID);
portionEx.getFill().getSolidColor().setColor(Color.lightGray);
portionEx.setLatinFont(titleFont);
portionEx.setFontHeight(20f);
```
## 画像を挿入する
```Java
//画像を読み込む
String imagePath = " java-logo.png";
Rectangle2D imageBounds = new Rectangle2D.Double(500, 80, 400, 200);
ShapeType shapeType = ShapeType.RECTANGLE;
BufferedImage bufferedImage = ImageIO.read(new FileInputStream(imagePath));
//画像を挿入する
IImageData iImageData = slide.getPresentation().getImages().append(bufferedImage);
IEmbedImage iEmbedImage = slide.getShapes().appendEmbedImage(shapeType, iImageData, imageBounds);
iEmbedImage.getLine().setFillType(FillFormatType.NONE);
iEmbedImage.getPictureFill().setFillType(PictureFillType.STRETCH);
```
## リストを挿入する
```Java
//箇条書きを挿入する
Rectangle2D listBounds = new Rectangle2D.Float(50, 160, 440, 180);
String[] listContent = new String[]{
        " PowerPointドキュメントを作成する",
        " 背景画像を設定する",
        " テキストを挿入する",
        " 画像を挿入する",
        " 箇条書きを挿入する",
        " 表を挿入する",
        " ドキュメントを保存する"
};
IAutoShape autoShape = slide.getShapes().appendShape(ShapeType.RECTANGLE, listBounds);
autoShape.getTextFrame().getParagraphs().clear();
autoShape.getFill().setFillType(FillFormatType.NONE);
autoShape.getLine().setFillType(FillFormatType.NONE);
for (int i = 0; i < listContent.length; i++) {
    //リスト内のテキストの書式を設定する
    ParagraphEx paragraph = new ParagraphEx();
    autoShape.getTextFrame().getParagraphs().append(paragraph);
    paragraph.setText(listContent[i]);
    paragraph.getTextRanges().get(0).getFill().setFillType(FillFormatType.SOLID);
    paragraph.getTextRanges().get(0).getFill().getSolidColor().setColor(Color.WHITE);
    paragraph.getTextRanges().get(0).setLatinFont(new TextFont("Calibri (Body)"));
    paragraph.getTextRanges().get(0).setFontHeight(20);
    paragraph.setBulletType(TextBulletType.SYMBOL);
}
```
## 表を挿入する
```Java
//列の幅と行の高さを設定する
Double[] widths = new Double[]{100d, 100d, 100d, 150d, 100d, 100d};
Double[] heights = new Double[]{15d, 15d, 15d, 15d};
//表を追加する
ITable table = presentation.getSlides().get(0).getShapes().appendTable(50, 350, widths, heights);
//テーブルデータを設定する
String[][] data = new String[][]{
        {"番号", "名前", "仕事", "就任日", "給与", "年齢"},
        {"7369", "藤沢 奈美", "エンジニア", "05/12/2021", "23000.00", "25"},
        {"7499", "Nero", "販売員", "03/23/2021", "18000.00", "30"},
        {"7566", "Martin", "マネージャー", "12/21/2021", "26000.00", "40"},
};
//テーブルの行と列を循環させる
for (int i = 0; i < data.length; i++) {
    for (int j = 0; j < data[i].length; j++) {
        //テーブルにデータをインポートする
        table.get(j, i).getTextFrame().setText(data[i][j]);
        //各セルのテキストを中央揃えにする
        table.get(j, i).getTextFrame().getParagraphs().get(0).setAlignment(TextAlignmentType.CENTER);
    }
}
//テーブルにプリセットスタイルを適用する
table.setStylePreset(TableStylePreset.LIGHT_STYLE_1_ACCENT_4);
```
## ドキュメントを保存する
//ドキュメントを保存する
```Java
presentation.saveToFile("output/CreatePowerPoint.pptx", FileFormat.PPTX_2013);
```
## 結果のファイル
![2022-07-21_174949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/fca17c9e-94a2-2999-a7ce-ce6fc05dc6f5.png)