Apache Poi Ppt 简明教程

Apache POI PPT - Slide Layouts

在上一章中,你已经了解了如何创建空幻灯片以及如何向其中添加幻灯片。在本章中,您将学习如何获取可用幻灯片的列表,以及如何创建具有不同布局的幻灯片。

Available Slide layouts

PowerPoint 演示文稿具有幻灯片布局,您可以选择所需布局来编辑幻灯片。首先,让我们找出所有可用幻灯片布局的列表。

  1. 有不同的幻灯片母版,并且在每个幻灯片母版中,都有多个幻灯片布局。

  2. 你可以使用 XMLSlideShow 类的 getSlideMasters() 方法来获取幻灯片母版列表。

  3. 你可以使用 XSLFSlideMaster 类的 getSlideLayouts() 方法从每个幻灯片母版中获取幻灯片布局列表。

  4. 你可以使用 XSLFSlideLayout 类的 getType() 方法从布局对象中获取幻灯片布局的名称。

Note − 所有这些类都属于 org.poi.xslf.usermodel 包。

下面提供了获取 PPT 中可用幻灯片布局的完整程序 −

import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;

public class SlideLayouts {
   public static void main(String args[]) throws IOException {
      //create an empty presentation
      XMLSlideShow ppt = new XMLSlideShow();
      System.out.println("Available slide layouts:");

      //getting the list of all slide masters
      for(XSLFSlideMaster master : ppt.getSlideMasters()) {
         //getting the list of the layouts in each slide master
         for(XSLFSlideLayout layout : master.getSlideLayouts()) {
            //getting the list of available slides
            System.out.println(layout.getType());
         }
      }
   }
}

将上面的 Java 代码另存为 SlideLayouts.java ,然后按如下所示从命令提示符对其进行编译和执行 −

$javac SlideLayouts.java
$java SlideLayouts

它将编译和执行以生成以下输出 −

Available slide layouts:
TITLE
PIC_TX
VERT_TX
TWO_TX_TWO_OBJ
BLANK
VERT_TITLE_AND_TX
TITLE_AND_CONTENT
TITLE_ONLY
SECTION_HEADER
TWO_OBJ
OBJ_TX

下面展示了一些适用于 MS-Office 360、2013 版本的幻灯片布局示例。

sample slide layouts

Title Layout

让我们使用标题布局在 PPT 中创建一个幻灯片。请按照以下步骤操作 −

Step 1 − 通过实例化来创建一个空演示文稿 XMLSlideShow 如下所示。

XMLSlideShow ppt = new XMLSlideShow();

Step 2 − 使用 getSlideMasters() 方法获取幻灯片母版列表。此后,使用索引选择所需的幻灯片母版,如下所示。

XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

这里我们获取在幻灯片母版数组中位于第 0 个位置的默认幻灯片母版。

Step 3 − 使用 XSLFSlideMaster 类的 getLayout() 方法获取所需的布局。此方法接受一个参数,你必须在其中传递 SlideLayoutclass 的静态变量之一,它代表我们的所需布局。此类中有多个变量,每个变量都代表一个幻灯片布局。

下面给出的代码片段演示如何创建一个标题布局 −

XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

Step 4 − 通过传递一个幻灯片布局对象作为参数来创建一个新幻灯片。

XSLFSlide slide = ppt.createSlide(titleLayout);

Step 5 − 使用 XSLFSlide 类的 getPlaceholder() 方法选择一个占位符。此方法接受一个整数参数。通过向其传递 0 ,你将获取 XSLFTextShape 对象,使用此对象,你可以访问幻灯片的标题文本区。使用 setText() 方法设置标题,如下所示。

XSLFTextShape title1 = slide.getPlaceholder(0);
//setting the title init
title1.setText("Tutorials point");

下面给出了在演示文稿中使用标题布局创建幻灯片的完整程序 −

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TitleLayout {
   public static void main(String args[]) throws IOException {
      //creating presentation
      XMLSlideShow ppt = new XMLSlideShow();

      //getting the slide master object
      XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

      //get the desired slide layout
      XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);

      //creating a slide with title layout
      XSLFSlide slide1 = ppt.createSlide(titleLayout);

      //selecting the place holder in it
      XSLFTextShape title1 = slide1.getPlaceholder(0);

      //setting the title init
      title1.setText("Tutorials point");

      //create a file object
      File file = new File("F://Titlelayout.pptx");
      FileOutputStream out = new FileOutputStream(file);

      //save the changes in a PPt document
      ppt.write(out);
      System.out.println("slide cretated successfully");
      out.close();
   }
}

将上面的 Java 代码另存为 TitleLayout.java,然后按如下所示从命令提示符对其进行编译和执行 −

$javac TitleLayout.java
$java TitleLayout

它会编译并执行以生成以下输出。

slide created successfully

新加的标题版式幻灯片的 PPT 文档显示如下所示 -

TitleLayOut

Title and content Layout

使用标题和内容版式在 PPT 中创建幻灯片。遵循以下给出的步骤。

Step 1 − 通过实例化来创建一个空演示文稿 XMLSlideShow 如下所示。

XMLSlideShow ppt = new XMLSlideShow();

Step 2 - 使用 getSlideMasters() 方法获取幻灯片母版列表。使用索引选择所需的幻灯片母版,如下所示。

XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

这里我们获取在幻灯片母版数组中位于第 0 个位置的默认幻灯片母版。

Step 3 - 使用 XSLFSlideMaster 类的 getLayout() 方法获取所需的版式。此方法接受一个参数,您必须在其中传递表示所需版式的 SlideLayout 类的 static 变量之一。此类中有几个表示幻灯片版式的变量。

以下代码片段显示如何创建标题和内容版式 -

XSLFSlideLayout contentlayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);

Step 4 - 通过传递幻灯片版式对象作为参数来创建新幻灯片。

XSLFSlide slide = ppt.createSlide(SlideLayout.TITLE_AND_CONTENT);

Step 5 - 使用 XSLFSlide 类的 getPlaceholder() 方法选择占位符。此方法接受一个整数参数。通过将 1 传递给它,您将获得 XSLFTextShape 对象,使用该对象您可以访问幻灯片的内容区域。使用 setText() 方法设置标题,如下所示。

XSLFTextShape title1 = slide1.getPlaceholder(1);
//setting the title init
title1.setText("Introduction");

Step 6 - 使用 XSLFTextShape 类的 clearText() 方法清除幻灯片中的现有文本。

body.clearText();

Step 7 - 使用 addNewTextParagraph() 方法添加新段落。现在使用 addNewTextRun() 方法向段落添加新的文本运行。现在将文本添加到文本运行,使用 setText() 方法,如下所示。

body.addNewTextParagraph().addNewTextRun().setText("this is  my first slide body");

下面给出了在演示文稿中使用标题布局创建幻灯片的完整程序 −

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.SlideLayout;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xslf.usermodel.XSLFSlideLayout;
import org.apache.poi.xslf.usermodel.XSLFSlideMaster;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TitleAndBodyLayout {
   public static void main(String args[]) throws IOException {
      //creating presentation
      XMLSlideShow ppt = new XMLSlideShow();

      //getting the slide master object
      XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

      //select a layout from specified list
      XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);

      //creating a slide with title and content layout
      XSLFSlide slide = ppt.createSlide(slidelayout);

      //selection of title place holder
      XSLFTextShape title = slide.getPlaceholder(0);

      //setting the title in it
      title.setText("introduction");

      //selection of body placeholder
      XSLFTextShape body = slide.getPlaceholder(1);

      //clear the existing text in the slide
      body.clearText();

      //adding new paragraph
      body.addNewTextParagraph().addNewTextRun().setText("this is  my first slide body");

      //create a file object
      File file = new File("contentlayout.pptx");
      FileOutputStream out = new FileOutputStream(file);

      //save the changes in a file
      ppt.write(out);
      System.out.println("slide cretated successfully");
      out.close();
   }
}

将上述 Java 代码另存为 TitleLayout.java ,然后从命令提示符编译并执行它,如下所示 -

$javac TitleLayout.java
$java TitleLayout

它将编译和执行以生成以下输出 −

slide created successfully

新加的标题版式幻灯片的 PPT 文档显示如下所示 -

TitleAndContentLayout

以相同的方式,您也可以创建具有不同版式的幻灯片。