1. 序章

この記事では、 ApachePOIを使用してプレゼンテーションを作成する方法を説明します。

このライブラリを使用すると、PowerPointプレゼンテーションを作成したり、既存のプレゼンテーションを読んだり、コンテンツを変更したりすることができます。

2. Mavenの依存関係

まず、pom.xmlに次の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>

両方のライブラリの最新バージョンは、MavenCentralからダウンロードできます。

3. Apache POI

Apache POIライブラリは.pptファイルと.pptxファイルの両方をサポートし、Powerpoint ’97(-2007)ファイル形式のHSLF実装と、PowerPoint2007OOXMLファイル形式のXSLFを提供します。

両方の実装に共通のインターフェイスが存在しないため、新しい.pptxファイル形式を使用する場合は、XMLSlideShow、XSLFSlide、およびXSLFTextShapeクラスを使用することを忘れないでください。

また、古い .ppt 形式で作業する必要がある場合は、 HSLFSlideShow HSLFSlide 、およびHSLFTextParagraphクラスを使用してください。

この例では、新しい .pptx ファイル形式を使用します。最初に行う必要があるのは、新しいプレゼンテーションを作成し、それにスライドを追加して(おそらく、事前定義されたレイアウトを使用して)保存することです。

これらの操作が明確になったら、画像、テキスト、表の操作を開始できます。

3.1. 新しいプレゼンテーションを作成する

まず、新しいプレゼンテーションを作成しましょう。

XMLSlideShow ppt = new XMLSlideShow();
ppt.createSlide();

3.2. 新しいスライドを追加する

プレゼンテーションに新しいスライドを追加するときに、事前定義されたレイアウトからスライドを作成することもできます。 これを実現するには、最初にレイアウトを保持する XSLFSlideMaster を取得する必要があります(最初のマスターはデフォルトのマスターです)。

XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);

これで、 XSLFSlideLayout を取得して、新しいスライドを作成するときに使用できます。

XSLFSlideLayout layout 
  = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide = ppt.createSlide(layout);

テンプレート内のプレースホルダーを埋める方法を見てみましょう。

XSLFTextShape titleShape = slide.getPlaceholder(0);
XSLFTextShape contentShape = slide.getPlaceholder(1);

各テンプレートにはプレースホルダー、 XSLFAutoShape サブクラスのインスタンスがあり、テンプレートごとに数が異なる可能性があることに注意してください。

スライドからすべてのプレースホルダーをすばやく取得する方法を見てみましょう。

for (XSLFShape shape : slide.getShapes()) {
    if (shape instanceof XSLFAutoShape) {
        // this is a template placeholder
    }
}

3.3. プレゼンテーションの保存

スライドショーを作成したら、次のステップはそれを保存することです。

FileOutputStream out = new FileOutputStream("powerpoint.pptx");
ppt.write(out);
out.close();

4. オブジェクトの操作

新しいプレゼンテーションを作成し、スライドを追加して(事前定義されたテンプレートを使用するかどうかに関係なく)保存する方法を確認したので、テキスト、画像、リンク、および表の追加を開始できます。

テキストから始めましょう。

4.1. 文章

MS PowerPointのように、プレゼンテーション内のテキストを操作する場合は、スライド内にテキストボックスを作成し、段落を追加してから、その段落にテキストを追加する必要があります。

XSLFTextBox shape = slide.createTextBox();
XSLFTextParagraph p = shape.addNewTextParagraph();
XSLFTextRun r = p.addNewTextRun();
r.setText("Baeldung");
r.setFontColor(Color.green);
r.setFontSize(24.);

XSLFTextRun を構成する場合、フォントファミリーを選択し、テキストを太字、斜体、または下線にすることで、スタイルをカスタマイズできます。

4.2. ハイパーリンク

プレゼンテーションにテキストを追加するときに、ハイパーリンクを追加すると便利な場合があります。

XSLFTextRun オブジェクトを作成したら、次のリンクを追加できます。

XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.baeldung.com");

4.3. 画像

画像を追加することもできます。

byte[] pictureData = IOUtils.toByteArray(
  new FileInputStream("logo-leaf.png"));

XSLFPictureData pd
  = ppt.addPicture(pictureData, PictureData.PictureType.PNG);
XSLFPictureShape picture = slide.createPicture(pd);

ただし、が適切に構成されていないと、画像はスライドの左上隅に配置されます。 適切に配置するには、アンカーポイントを構成する必要があります。

picture.setAnchor(new Rectangle(320, 230, 100, 92));

XSLFPictureShape は、アンカーポイントとして Rectangle を受け入れます。これにより、最初の2つのパラメーターでx / y座標を構成し、最後の2つのパラメーターで画像の幅/高さを構成できます。 。

4.4. リスト

プレゼンテーション内のテキストは、番号が付けられているかどうかに関係なく、リストの形式で表されることがよくあります。

次に、箇条書きのリストを定義しましょう。

XSLFTextShape content = slide.getPlaceholder(1);
XSLFTextParagraph p1 = content.addNewTextParagraph();
p1.setIndentLevel(0);
p1.setBullet(true);
r1 = p1.addNewTextRun();
r1.setText("Bullet");

同様に、番号付きリストを定義できます。

XSLFTextParagraph p2 = content.addNewTextParagraph();
p2.setBulletAutoNumber(AutoNumberingScheme.alphaLcParenRight, 1);
p2.setIndentLevel(1);
XSLFTextRun r2 = p2.addNewTextRun();
r2.setText("Numbered List Item - 1");

複数のリストを使用している場合は、アイテムの適切なインデントを実現するために、indentLevelを定義することが常に重要です。

4.5. テーブル

テーブルはプレゼンテーションのもう1つの重要なオブジェクトであり、データを表示する場合に役立ちます。

テーブルを作成することから始めましょう:

XSLFTable tbl = slide.createTable();
tbl.setAnchor(new Rectangle(50, 50, 450, 300));

これで、ヘッダーを追加できます。

int numColumns = 3;
XSLFTableRow headerRow = tbl.addRow();
headerRow.setHeight(50);

for (int i = 0; i < numColumns; i++) {
    XSLFTableCell th = headerRow.addCell();
    XSLFTextParagraph p = th.addNewTextParagraph();
    p.setTextAlign(TextParagraph.TextAlign.CENTER);
    XSLFTextRun r = p.addNewTextRun();
    r.setText("Header " + (i + 1));
    tbl.setColumnWidth(i, 150);
}

ヘッダーが完成したら、テーブルに行とセルを追加してデータを表示できます。

for (int rownum = 1; rownum < numRows; rownum++) {
    XSLFTableRow tr = tbl.addRow();
    tr.setHeight(50);

    for (int i = 0; i < numColumns; i++) {
        XSLFTableCell cell = tr.addCell();
        XSLFTextParagraph p = cell.addNewTextParagraph();
        XSLFTextRun r = p.addNewTextRun();
        r.setText("Cell " + (i*rownum + 1));
    }
}

テーブルを操作するときは、すべてのセルの境界線と背景をカスタマイズできることを覚えておくことが重要です。

5. プレゼンテーションの変更

スライドショーで作業するときは必ずしも新しいものを作成する必要はありませんが、既存のスライドショーを変更する必要があります。

前のセクションで作成したものを見てみましょう。それから、変更を開始できます。

5.1. プレゼンテーションを読む

プレゼンテーションの読み取りは非常に簡単で、FileInputStreamを受け入れるXMLSlideShowオーバーロードコンストラクターを使用して実行できます。

XMLSlideShow ppt = new XMLSlideShow(
  new FileInputStream("slideshow.pptx"));

5.2. スライドの順序を変更する

プレゼンテーションにスライドを追加するときは、スライドが適切に流れるように、スライドを正しい順序で配置することをお勧めします。

これが起こらない場合は、スライドの順序を並べ替えることができます。 4番目のスライドを2番目のスライドに移動する方法を見てみましょう。

List<XSLFSlide> slides = ppt.getSlides();

XSLFSlide slide = slides.get(3);
ppt.setSlideOrder(slide, 1);

5.3. スライドの削除

プレゼンテーションからスライドを削除することも可能です。

4番目のスライドを削除する方法を見てみましょう。

ppt.removeSlide(3);

6. 結論

このクイックチュートリアルでは、 Apache POI APIを使用して、Javaの観点からPowerPointファイルを読み書きする方法を説明しました。

この記事の完全なソースコードは、いつものように、GitHubにあります。