JavaでのMS PowerPointプレゼンテーションの作成
1. 前書き
この記事では、Apache POIを使用してプレゼンテーションを作成する方法を説明します。
このライブラリにより、PowerPointプレゼンテーションを作成したり、既存のプレゼンテーションを読んだり、コンテンツを変更したりすることができます。
2. Mavenの依存関係
まず、pom.xmlに次の依存関係を追加する必要があります。
org.apache.poi
poi
3.17
org.apache.poi
poi-ooxml
3.17
両方のlibrariesの最新バージョンは、MavenCentralからダウンロードできます。
3. アパッチPOI
Apache POI library supports both .ppt and .pptx filesは、Powerpoint '97(-2007)ファイル形式のHSLF実装と、PowerPoint 2007OOXMLファイル形式のXSLFを提供します。
両方の実装に共通のインターフェースが存在しないため、we have to remember to use the XMLSlideShow, XSLFSlide and XSLFTextShape classes when working with the newer .pptx file format。
また、古い.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. Text
MS PowerPointのようにプレゼンテーション内のテキストを操作する場合、スライド内にテキストボックスを作成し、段落を追加してから、テキストを段落に追加する必要があります。
XSLFTextBox shape = slide.createTextBox();
XSLFTextParagraph p = shape.addNewTextParagraph();
XSLFTextRun r = p.addNewTextRun();
r.setText("example");
r.setFontColor(Color.green);
r.setFontSize(24.);
XSLFTextRunを構成する場合、フォントファミリーを選択し、テキストを太字、斜体、または下線付きにするかどうかを選択して、スタイルをカスタマイズできます。
4.2. ハイパーリンク
プレゼンテーションにテキストを追加するときに、ハイパーリンクを追加すると便利な場合があります。
XSLFTextRunオブジェクトを作成したら、リンクを追加できます。
XSLFHyperlink link = r.createHyperlink();
link.setAddress("http://www.example.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);
ただし、without a proper configuration, the image will be placed in the top left corner of the slide。 適切に配置するには、アンカーポイントを構成する必要があります。
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 slides = ppt.getSlides();
XSLFSlide slide = slides.get(3);
ppt.setSlideOrder(slide, 1);
5.3. スライドの削除
プレゼンテーションからスライドを削除することもできます。
4番目のスライドを削除する方法を見てみましょう。
ppt.removeSlide(3);
6. 結論
このクイックチュートリアルでは、Apache POIAPIを使用してJavaの観点からPowerPointファイルを読み書きする方法を説明しました。
この記事の完全なソースコードは、いつものように、over on GitHubにあります。