1前書き

この記事では、https://poi.apache.org[Apache POI]を使ってプレゼンテーションを作成する方法を説明します。

このライブラリは、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>


ライブラリ

はMaven Centralからダウンロードできます。


3 Apache POI


  • Apache POI

    ライブラリは

    .ppt



    .pptx

    の両方のファイルをサポートしています** 。 PowerPoint 2007のOOXMLファイル形式。

両方の実装に共通のインターフェイスが存在しないため、** 新しい

.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プレゼンテーションを変更する

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

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

リンク:/uploads/presentation-1-300×161.jpg[]


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ファイルを読み書きする方法を説明しました。

この記事の完全なソースコードは、いつものようにhttps://github.com/eugenp/tutorials/tree/master/apache-poi[over on GitHub]にあります。