Apache Poi Ppt 简明教程

Apache POI PPT - Quick Guide

Apache POI PPT - Overview

很多时候,软件应用程序需要生成 Microsoft Office 文件格式的报告。有时,甚至需要应用程序接收 MS-Office 文件作为输入数据。

任何想要生成 MS Office 文件作为输出的 Java 编程人员都必须使用一个预定义且只读的 API 来执行此操作。

What is Apache POI?

Apache POI 是一个流行的 API,它允许程序员使用 Java 程序创建、修改和显示 MS-Office 文件。它是一个由 Apache Software Foundation 开发和分发的开源库。它包含用于对用户输入数据或文件解码为 MS Office 文档的类和方法。

Components of Apache POI

Apache POI 包含用于操作 MS-Office 所有 OLE2 复合文档的类和方法。此 API 的组件列表如下 -

  1. POIFS (Poor Obfuscation Implementation File System) − 此组件是所有其他 POI 元素的基本因素。它用于明确读取不同文件。

  2. HSSF (Horrible SpreadSheet Format) − 用于读取和写入 MS-Excel 文件的 .xls 格式。

  3. XSSF (XML SpreadSheet Format) − 用于 MS-Excel 的 .xlsx 文件格式。

  4. HPSF (Horrible Property Set Format) − 它用于提取 MS-Office 文件的属性集。

  5. HWPF (Horrible Word Processor Format) − 用于读取和写入 MS-Word 的 .doc 扩展文件。

  6. XWPF (XML Word Processor Format) − 用于读取和写入 MS-Word 的 .docx 扩展文件。

  7. HSLF (Horrible Slide Layout Format) − 用于读取、创建和编辑 PowerPoint 演示文稿。

  8. HDGF (Horrible DiaGram Format) − 包含 MS-Visio 二进制文件所需类和方法。

  9. HPBF (Horrible PuBlisher Format) − 用于读取和写入 MS-Publisher 文件。

本教程将指导你完成使用 Java 处理 Microsoft PowerPoint 演示文稿的过程。因此,讨论仅限于 XSLF component.

Note − POI 的较早版本支持 doc、xls、ppt 等二进制文件格式。从版本 3.5 起,POI 开始支持 MS-Office 的 OOXML 文件格式,如 docx、xlsx、pptx 等。

Flavors of Java PPT API

本章将带你了解 Java PowerPoint API 的一些优点及其特性。有许多供应商提供与 Java PPT 相关的 API;本章中考虑了其中一些。

Aspose Slides for Java

针对 Java 的 Aspose 幻灯片是完全许可的 Java PPT API,由供应商 Aspose 开发和分发。此 API 的最新版本为 8.1.2,于 2014 年 7 月发布。它是一个丰富且庞大的 API(普通 Java 类和 AWT 类相结合),用于设计能够读取、写入和管理幻灯片的 PPT 组件。

此 API 的常见用途如下 −

  1. Build dynamic presentations

  2. 呈现和打印高质量演示文稿

  3. 生成、编辑、转换和打印演示文稿

Apache POI

Apache POI 是 Apache 软件基金会提供的一个 100% 的开源库。大多数小型和中型应用程序开发者严重依赖 Apache POI (HSLF + XSLF)。它支持 PPT 库的所有基本功能;但是,呈现和文本提取是它的主要功能。下面给出了 Apache POI 的 PPT 架构。

apache poi flavors

Apache POI PPT - Installation

本教程将指导你完成在 Windows 和 Linux 系统上设置 Apache POI 的流程。Apache POI 可以在不执行任何复杂设置程序的情况下,使用几个简单的步骤轻松安装并集成到当前的 Java 环境中。在安装时需要有用户管理权限。

System Requirements

JDK

Java SE 2 JDK 1.5 或更高版本

Memory

1 GB RAM (recommended)

Disk Space

No minimum requirement

Operating System Version

Windows XP 或更高版本、Linux

现在让我们继续进行安装 Apache POI 的步骤。

Step 1 − Verify your Java Installation

首先,你的系统中需要安装 Java 软件开发工具包 (SDK)。要验证这一点,请根据所使用的平台执行以下两个命令。

如果 Java 安装已正确完成,则它将显示 Java 安装的当前版本和规范。以下表中给出了一个示例输出。

Platform

Command

Sample Output

Windows

打开命令控制台并输入 - >java –version

java version "11.0.11" 2021-04-20 LTSOpen JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode)

Linux

打开命令终端并输入 - $java –version

java version "11.0.11" 2021-04-20 LTSOpen JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode)

  1. 我们假设本教程的读者已在他们的系统中安装了 Java SDK 版本 11.0.11。

  2. 如果您没有 Java SDK,请从 www.oracle.com/technetwork/java/javase/downloads/index.html 下载其当前版本并将其安装。

Step 2 − Set your Java Environment

设置环境变量 JAVA_HOME 以指向计算机上安装 Java 的基本目录位置。例如,

Sr.No.

Platform & Description

1

Windows Set JAVA_HOME to C:\ProgramFiles\java\jdk11.0.11

2

Linux Export JAVA_HOME = /usr/local/java-current

将 Java 编译器位置的完整路径附加到系统路径。

Sr.No.

Platform & Description

1

Windows 将字符串“C:\Program Files\Java\jdk11.0.11\bin”附加到系统变量 PATH 的末尾。

2

Linux Export PATH = $PATH:$JAVA_HOME/bin/

如上所述,从命令提示符执行命令 java -version

Step 3 − Install Apache POI Library

https://poi.apache.org/download.html 下载最新版本的 Apache POI,并将其内容解压缩到一个文件夹中,然后可以将该文件夹中的所需库连接到你的 Java 程序。我们假设这些文件保存在 C 驱动器的文件夹中。

将必需的 jars 的完整路径添加到 CLASSPATH,如下所示。

Sr.No.

Platform & Description

1

Windows 将以下字符串附加到用户变量 CLASSPATH 的末尾 −C:\poi-bin-5.1.0\poi-5.1.0.jar;C:\poi-bin-5.1.0\poi-ooxml-5.1.0.jar;C:\poi-bin-5.1.0\poi-ooxml-full-5.1.0.jar;C:\poi-bin-5.1.0\lib\commons-codec-1.15.jar;C:\poi-bin-5.1.0\lib\commons-collections4-4.4.jar;C:\poi-bin-5.1.0\lib\commons-io-2.11.0.jar;C:\poi-bin-5.1.0\lib\commons-math3-3.6.1.jar;C:\poi-bin-5.1.0\lib\log4j-api-2.14.1.jar;C:\poi-bin-5.1.0\lib\SparseBitSet-1.2.jar;C\poi-bin-5.1.0\ooxml-lib\commons-compress-1.21.jarC\poi-bin-5.1.0\ooxml-lib\commons-logging-1.2.jarC\poi-bin-5.1.0\ooxml-lib\curvesapi-1.06.jarC\poi-bin-5.1.0\ooxml-lib\slf4j-api-1.7.32.jarC\poi-bin-5.1.0\ooxml-lib\xmlbeans-5.0.2.jar

2

Linux Export CLASSPATH = $CLASSPATH: /usr/share/poi-bin-5.1.0/poi-5.1.0.jar.tar: /usr/share/poi-bin-5.1.0/poi-ooxml-5.1.0.tar: /usr/share/poi-bin-5.1.0/poi-ooxml-full-5.1.0.tar: /usr/share/poi-bin-5.1.0/lib/commons-codec-1.15.jar.tar: /usr/share/poi-bin-5.1.0/lib/commons-collections4-4.4.tar: /usr/share/poi-bin-5.1.0/lib/commons-io-2.11.0.tar: /usr/share/poi-bin-5.1.0/lib/commons-math3-3.6.1.tar: /usr/share/poi-bin-5.1.0/lib/log4j-api-2.14.1.tar: /usr/share/poi-bin-5.1.0/lib/SparseBitSet-1.2.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/commons-compress-1.21.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/commons-logging-1.2.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/curvesapi-1.06.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/slf4j-api-1.7.32.tar: /usr/share/poi-bin-5.1.0/ooxml-lib/xmlbeans-5.0.2.tar:

pom.xml

以下是运行本教程中程序的 pom.xml 文件。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>ApachePoiPPT</groupId>
   <artifactId>ApachePoiPPT</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <build>
      <sourceDirectory>src</sourceDirectory>
      <plugins>
         <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
               <source>11</source>
               <target>11</target>
               <compilerArgs>
                  <arg>--add-modules</arg>
                  <arg>java.se,java.desktop</arg>
               </compilerArgs>
            </configuration>
         </plugin>
      </plugins>
   </build>
   <dependencies>
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
         <version>5.1.0</version>
      </dependency>
      <dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi-ooxml</artifactId>
         <version>5.1.0</version>
      </dependency>
   </dependencies>
</project>

Apache POI PPT - Classes and Methods

在本章中,我们将了解 Apache POI API 中的一些类和方法,这些方法对于使用 Java 程序处理 PPT 文件至关重要。

Presentation

要创建和管理演示文稿,您有一个名为 XMLSlideShow 的类,该类位于包 org.apache.poi.xslf.usermodel 中。下面给出了此类的某些重要方法和一个构造函数。

Class − XMLSlideShow

Package − org.apache.poi.xslf.usermodel

S.No

Constructor & Description

1

XMLSlideShow(java.io.InputStream inputStream) 您可以通过向其传递 inputstream 类对象来实例化此类。

S.No

Methods & Description

1

int addPicture (byte[] pictureData, int format) 使用此方法,您可以向演示文稿中添加图片。

2

XSLFSlide createSlide() 在演示文稿中创建一张空白幻灯片。

3

XSLFSlide createSlide(XSLFSlideLayout layout) 使用给定的幻灯片布局创建一张幻灯片。

4

java.util.List &lt;XSLFPictureData&gt; getPictureData() 返回演示文稿中所有图片的数组。

5

java.awt.Dimension getPageSize() 使用此方法,您可以了解当前页的大小。

6

java.util.List&lt;XSLFSlideMaster&gt; getSlideMasters() 返回演示文稿中所有幻灯片的列表。

7

java.util.List&lt;XSLFSlide&gt; getSlides() 返回演示文稿中的所有幻灯片。

8

XSLFSlide removeSlide(int index) 使用这种方法,您可删除演示文稿中的一张幻灯片。

9

void setPageSize(java.awt.Dimension pgSize) 使用这种方法,您可重置页面大小。

10

void setSlideOrder(XSLFSlide slide, int newIndex) 使用这种方法,您可重新排列幻灯片。

Slide

如需在演示文稿中创建和管理幻灯片,请使用 XSLFSlide 类的相关方法。该类中的一些重要方法如下所述。

Class − XSLFSlide

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

XSLFBackground getBackground() 返回 XSLFBackground 对象,可用于获取幻灯片背景颜色和锚点等详细信息。您还可使用此对象在幻灯片中绘制形状。

2

XSLFSlideLayout getSlideLayout() 提供对当前幻灯片的 XSLFSlideLayout 对象的访问权限。

3

XSLFSlideMaster getSlideMaster() 提供对当前幻灯片的幻灯片母版的访问权限。

4

XSLFTheme getTheme() 返回当前幻灯片的 XSLFTheme 对象。

5

java.lang.String getTitle() 返回当前幻灯片的标题。

6

XSLFSlide importContent(XSLFSheet src) 将另一幻灯片的内容复制到这张幻灯片中。

Slide Master

这是演示文稿的一个组件,具有不同的幻灯片布局。 XSLFSlideMaster 类可用于对其进行访问。该类的部分重要方法如下所示。

Class − XSLFSlideMaster

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

XSLFBackground getBackground() 返回幻灯片母版的公用背景。

2

XSLFSlideLayout getLayout(SlideLayout type) 返回 XSLFSlideLayout 对象。

3

java.util.List&lt;XSLFSlideLayout&gt; getSlideLayouts() 返回此幻灯片母版中的所有幻灯片布局。

Slide Layout

POI 库有一个名为 XSLFSlideLayout 的类,可用于管理幻灯片的布局。

Class − XSLFSlideLayout

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

void copyLayout(XSLFSlide slide) 该方法将从此布局中复制占位符到给定的幻灯片中。

Text Paragraph

可以使用 XSLFTextParagraph 类向幻灯片写入内容。下面提到了该类的部分重要方法。

Class − XSLFTextParagraph

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

XSLFTextRun addLineBreak() 在段落中插入换行符。

2

XSLFTextRun addNewTextRun() 在段落中添加新文本的连续段落。

3

void setBulletAutoNumber(ListAutoNumber scheme, int startAt) 向段落应用自动编号的项目符号。

4

void setIndent(double value) 设置段落中文本的缩进。

5

void setLeftMargin(double value) 该方法用于添加段落的左边缘。

6

void setLineSpacing(double linespacing) 该方法用于设置段落中的行距。

7

void setTextAlign(TextAlign align) 该方法用于设置要应用于段落的对齐方式。

Text Run

这是文本主体中文本分隔的最低级别。您可以通过 XSLFTextRun 类来管理段落的文本段。下面提到了该类的部分重要方法。

Class − XSLFTextParagraph

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

XSLFHyperlink createHyperlink() 在演示文稿中创建超链接。

2

XSLFHyperlink getHyperlink() 该方法用于获取超链接。

3

java.lang.String getText() 将此文本节点的值作为 Java 字符串返回。

4

void setBold(boolean bold) 该方法用于将文本设置为粗体。

5

void setCharacterSpacing(double spc) 设置文本段落中字符之间的间距。

6

void setFontColor(java.awt.Color color) 设置文本的字体颜色。

7

void setFontSize(double fontSize) 设置文本的字体大小。

8

void setItalic(boolean italic) 该方法用于使段落变为斜体。

9

void setStrikethrough(boolean strike) 该方法用于将文本段落设为删除线文本。

10

void setSubscript(boolean flag) 此方法用于将文本格式化为下标。

11

void setSuperscript(boolean flag) 此方法用于将此运行中的文本格式化为上标。

12

void setText(java.lang.String text) 此方法用于在一个运行中设置文本。

13

void setUnderline(boolean underline) 此方法用于下划线文本文本运行中的文本。

Text shape

在 PPT 中,我们有可以容纳文本的形状。我们可以使用 XSLFTextShape 类来管理它们。下面提到了此类的一些重要方法。

Class − XSLFTextShape

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

void setPlaceholder(Placeholder placeholder) 使用此方法,您可以选择一个占位符。

2

Placeholder getTextType() 返回当前占位符的类型。

3

void clearText() 清除当前文本形状的文本区域。

4

XSLFTextParagraph addNewTextParagraph() 向一个形状中添加一个新的段落运行。

5

void drawContent(java.awt.Graphics2D graphics) 此方法允许您在幻灯片上绘制任意内容。

POI 库有一个名为 XSLFHyperlink 的类,您可以使用它在演示文稿中创建一个超链接。下面提到了此类的一些重要方法。

Class − XSLFHyperlink

Package − org.apache.poi.xslf.usermodel

S.No

Method & Description

1

java.net.URI getTargetURL() 返回演示文稿幻灯片中存在的 URL。

2

void setAddress(java.lang.String address) 此方法用于将地址设置为 URL。

3

void setAddress(XSLFSlide slide) 将地址设置为演示文稿幻灯片中存在的 URL。

Apache POI PPT - Presentation

通常,我们使用 MS-PowerPoint 创建演示文稿。现在让我们看看如何使用 Java 创建演示文稿。完成本章后,你将能够创建新的 MS-PowerPoint 演示文稿,并使用你的 Java 程序打开现有的 PPT。

Creating Empty Presentation

要创建一个空演示文稿,你必须实例化 org.poi.xslf.usermodel 包的 XMLSlideShow 类 −

XMLSlideShow ppt = new XMLSlideShow();

使用 FileOutputStream 类将更改保存到 PPT 文档 −

File file = new File("C://POIPPT//Examples//example1.pptx");
FileOutputStream out = new FileOutputStream(file);
ppt.write(out);

下面给出了创建空白 MS-PowerPoint 演示文稿的完整程序。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;

public class CreatePresentation {
   public static void main(String args[]) throws IOException {
      //creating a new empty slide show
      XMLSlideShow ppt = new XMLSlideShow();

      //creating an FileOutputStream object
      File file = new File("example1.pptx");
      FileOutputStream out = new FileOutputStream(file);

      //saving the changes to a file
      ppt.write(out);
      System.out.println("Presentation created successfully");
      out.close();
   }
}

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

$javac CreatePresentation.java
$java CreatePresentation

如果你的系统环境配置了 POI 库,它将编译并执行以在你的当前目录中生成一个名为 example1.pptx 的空白 PPT 文件,并在命令提示符上显示以下输出 −

Presentation created successfully

空白的 PowerPoint 文档显示如下 −

example1

Editing an Existing Presentation

要打开现有的演示文稿,请实例化 XMLSlideShow 类,并将要编辑的文件的 FileInputStream 对象作为 XMLSlideShow 构造函数的参数传递。

File file = new File("C://POIPPT//Examples//example1.pptx");
FileInputstream inputstream = new FileInputStream(file);
XMLSlideShow ppt = new XMLSlideShow(inputstream);

你可以使用 org.poi.xslf.usermodel 包中 XMLSlideShow 类的 createSlide() 方法向演示文稿中添加幻灯片。

XSLFSlide slide1 = ppt.createSlide();

下面给出了打开现有的 PPT 并向其中添加幻灯片的完整程序 −

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class EditPresentation {
   public static void main(String ar[]) throws IOException {
      //opening an existing slide show
      File file = new File("example1.pptx");
      FileInputStream inputstream = new FileInputStream(file);
      XMLSlideShow ppt = new XMLSlideShow(inputstream);

      //adding slides to the slideshow
      XSLFSlide slide1 = ppt.createSlide();
      XSLFSlide slide2 = ppt.createSlide();

      //saving the changes
      FileOutputStream out = new FileOutputStream(file);
      ppt.write(out);

      System.out.println("Presentation edited successfully");
      out.close();
   }
}

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

$javac EditPresentation.java
$java EditPresentation

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

slides successfully added

带有新添加幻灯片输出的 PPT 文档如下所示 −

editexample1

将幻灯片添加到 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

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

Apache POI PPT - Slide Management

完成本章后,你将能够删除、重新排序并在幻灯片上执行读写操作。

Changing a Slide

我们可以使用 setPageSize() 类使用 XMLSlideShow 方法更改幻灯片的页面大小。

最初创建一个演示文稿,如下所示 −

File file = new File("C://POIPPT//Examples// TitleAndContentLayout.pptx");

//create presentation
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

使用 getPageSize() 方法从 XMLSlideShow 类中获取当前幻灯片的大小。

java.awt.Dimension pgsize = ppt.getPageSize();

使用 setPageSize() 方法设置页面大小。

ppt.setPageSize(new java.awt.Dimension(1024, 768));

完整的更改幻灯片大小的程序如下 -

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.xslf.usermodel.XMLSlideShow;

public class ChangingSlide {
   public static void main(String args[]) throws IOException {
      //create file object
      File file = new File("TitleAndContentLayout.pptx");

      //create presentation
      XMLSlideShow ppt = new XMLSlideShow();

      //getting the current page size
      java.awt.Dimension pgsize = ppt.getPageSize();
      int pgw = pgsize.width; //slide width in points
      int pgh = pgsize.height; //slide height in points

      System.out.println("current page size of the PPT is:");
      System.out.println("width :" + pgw);
      System.out.println("height :" + pgh);

      //set new page size
      ppt.setPageSize(new java.awt.Dimension(2048,1536));

      //creating file object
      FileOutputStream out = new FileOutputStream(file);

      //saving the changes to a file
      ppt.write(out);
      System.out.println("slide size changed to given dimentions ");
      out.close();
   }
}

保存上述 Java 代码为 ChangingSlide.java ,然后按照以下步骤从命令提示符处进行编译和执行 -

$javac ChangingSlide.java
$java ChangingSlide

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

current page size of the presentation is :
width :720
height :540
slide size changed to given dimensions

以下是更改幻灯片大小之前的演示文稿的快照 -

TitleAndContentLayout

更改大小后,幻灯片如下所示 -

slideAfterChange

Reordering Slides

您可以使用 setSlideOrder() 方法设置幻灯片顺序。下面是设置幻灯片顺序的步骤。

如以下所示打开现有的 PPT 文档 -

File file = new File("C://POIPPT//Examples//example1.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

使用 getSlides() 方法获取幻灯片,如下所示 -

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

从幻灯片数组中选择一个幻灯片,并使用 setSlideOrder() 方法更改顺序,如下所示 -

//selecting the fourth slide
XSLFSlide selectesdslide = slides.get(4);

//bringing it to the top
ppt.setSlideOrder(selectesdslide, 1);

下面是重新排列演示文稿中幻灯片的完整程序 -

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class ReorderSlide {
   public static void main(String args[]) throws IOException {
      //opening an existing presentation
      File file = new File("example1.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

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

      //selecting the fourth slide
      XSLFSlide selectesdslide = slides.get(13);

      //bringing it to the top
      ppt.setSlideOrder(selectesdslide, 0);

      //creating an file object
      FileOutputStream out = new FileOutputStream(file);

      //saving the changes to a file
      ppt.write(out);
      out.close();
   }
}

将以上 Java 代码保存为 ReorderSlide.java ,然后从命令提示符编译并执行它,如下所示:

$javac ReorderSlide.java
$java ReorderSlide

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

Reordering of the slides is done

下面是重新排序幻灯片前的演示文稿的快照:

Before Reorder

重新排序幻灯片后,演示文稿会以如下方式出现。在这里,我们选中包括图像的幻灯片并将其移到顶部。

After Reorder

Deleting Slides

您可以使用 removeSlide() 方法来删除幻灯片。按照下列步骤删除幻灯片。

使用 XMLSlideShow 类打开现有的演示文稿,如下所示:

File file = new File("C://POIPPT//Examples//image.pptx");
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

使用 removeSlide() 方法删除所需的幻灯片。此方法接受一个整数参数。将要删除的幻灯片的索引传递给此方法。

ppt.removeSlide(1);

以下是从演示文稿中删除幻灯片的程序:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.XMLSlideShow;

public class Deleteslide {
   public static void main(String args[]) throws IOException {
      //Opening an existing slide
      File file = new File("image.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

      //deleting a slide
      ppt.removeSlide(1);

      //creating a file object
      FileOutputStream out = new FileOutputStream(file);

      //Saving the changes to the presentation
      ppt.write(out);
      out.close();
   }
}

将以上 Java 代码保存为 Deleteslide.java ,然后从命令提示符编译并执行它,如下所示:

$javac Deleteslide.java
$java Deleteslide

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

reordering of the slides is done

以下快照显示的是删除幻灯片前的演示文稿:

After Reorder

删除幻灯片后,演示文稿如下所示 −

deleteslides

Apache POI PPT - Images

在本章中,您将学习如何向 PPT 添加图像以及如何从中读取图像。

Adding Image

您可以使用 createPicture()XSLFSlide 方法向演示文稿添加图像。此方法以字节数组格式接受图像。因此,您需要创建要添加到演示文稿的图像的字节数组。

按照给定的步骤向演示文稿添加图像。使用 XMLSlideShow 创建一个空幻灯片,如下所示 −

XMLSlideShow ppt = new XMLSlideShow();

在其中使用 createSlide() 创建一个空演示文稿。

XSLFSlide slide = ppt.createSlide();

读取要添加的图像文件,并使用 IOUtils 类的 IOUtils.toByteArray() 将其转换为字节数组,如下所示 −

//reading an image
File image = new File("C://POIPPT//boy.jpg");

//converting it into a byte array
byte[] picture = IOUtils.toByteArray(new FileInputStream(image));

使用 addPicture() 将图像添加到演示文稿。此方法接受两个变量:要添加的图像的字节数组格式和表示图像文件格式的静态变量。 addPicture() 方法的用法如下所示 −

XSLFPictureData idx = ppt.addPicture(picture, XSLFPictureData.PICTURE_TYPE_PNG);

使用 createPicture() 将图像嵌入到幻灯片中,如下所示 −

XSLFPictureShape pic = slide.createPicture(idx);

下面给出了在演示文稿的幻灯片中添加图像的完整程序 −

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;

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

      //creating a slide in it
      XSLFSlide slide = ppt.createSlide();

      //reading an image
      File image = new File("C://POIPPT//boy.jpg");

      //converting it into a byte array
      byte[] picture = IOUtils.toByteArray(new FileInputStream(image));

      //adding the image to the presentation
      XSLFPictureData idx = ppt.addPicture(picture, PictureType.PNG);

      //creating a slide with given picture on it
      XSLFPictureShape pic = slide.createPicture(idx);

      //creating a file object
      File file = new File("addingimage.pptx");
      FileOutputStream out = new FileOutputStream(file);

      //saving the changes to a file
      ppt.write(out);
      System.out.println("image added successfully");
      out.close();
   }
}

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

$javac AddingImage.java
$java AddingImage

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

reordering of the slides is done

带有新添加幻灯片的演示文稿(其中包含图像)如下所示 −

AddingImage

Reading Image

您可以使用 XMLSlideShow 类中的 getPictureData() 方法获取所有图片的数据。以下程序从演示文稿读取图像 −

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;

public class Readingimage {
   public static void main(String args[]) throws IOException {
      //open an existing presentation
      File file = new File("addingimage.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

      //reading all the pictures in the presentation
      for(XSLFPictureData data : ppt.getPictureData()){
         byte[] bytes = data.getData();
         String fileName = data.getFileName();
         PictureType pictureFormat = data.getType();
         System.out.println("picture name: " + fileName);
         System.out.println("picture format: " + pictureFormat);
      }
      //saving the changes to a file
      FileOutputStream out = new FileOutputStream(file);
      ppt.write(out);
      out.close();
   }
}

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

$javac Readingimage.java
$java Readingimage

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

picture name: image1.png
picture format: 6

在本章中,你将学习如何在演示文稿中创建超链接。

你可以使用 XSLFTextRun 类的 createHyperlink() 方法来读取演示文稿中的超链接。按照下面给出的步骤,在演示文稿中创建一个超链接。

使用 XMLSlideShow 类创建一个空演示文稿,如下所示:

XMLSlideShow ppt = new XMLSlideShow();

创建一个空幻灯片,并使用主体和内容布局创建一个文本框和幻灯片的正文。

//create an empty presentation
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

//creating a slide with title and content layout
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide = ppt.createSlide(slidelayout);

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

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

创建文本运行对象,并设置其文本,如下所示:

XSLFTextRun textRun = body.addNewTextParagraph().addNewTextRun();
textRun.setText("Tutorials point");

使用 XSLFTextRun 类的 createHyperlink() 方法创建一个超链接,如下所示:

XSLFHyperlink link = textRun.createHyperlink();

使用 XSLFHyperlink 类的 setAddress() 方法设置超链接的链接地址,如下所示:

link.setAddress("https://www.tutorialspoint.com/");

下面给出了在演示文稿中创建超链接的完整程序:

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.XSLFHyperlink;
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.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class CreatingHyperlinks {
   public static void main(String args[]) throws IOException {
      //create an empty 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 body = slide.getPlaceholder(1);

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

      //adding new paragraph
      XSLFTextRun textRun = body.addNewTextParagraph().addNewTextRun();

      //setting the text
      textRun.setText("Tutorials point");

      //creating the hyperlink
      XSLFHyperlink link = textRun.createHyperlink();

      //setting the link address
      link.setAddress("https://www.tutorialspoint.com/");

      //create the file object
      File file = new File("hyperlink.pptx");
      FileOutputStream out = new FileOutputStream(file);

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

将上述 Java 代码保存为 CreatingHyperlinks.java ,然后从命令提示符编译并执行,如下所示:

$javac CreatingHyperlinks.java
$java CreatingHyperlinks

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

slide created successfully

新添加的幻灯片及其正文中的超链接如下所示:

CreateHyperlink

Apache POI PPT - Reading Shapes

您可以使用 XSLFShape 类中的 getShapeName() 方法获取演示文稿中使用的形状的数量。下面是用于从演示文稿读取形状的程序 −

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class ReadingShapes {
   public static void main(String args[]) throws IOException {
      //creating a slideshow
      File file = new File("shapes.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

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

      //getting the shapes in the presentation
      System.out.println("Shapes in the presentation:");
      for (int i = 0; i < slide.size(); i++){
         List<XSLFShape> sh = slide.get(i).getShapes();
         for (int j = 0; j < sh.size(); j++){
            //name of the shape
            System.out.println(sh.get(j).getShapeName());
         }
      }
      FileOutputStream out = new FileOutputStream(file);
      ppt.write(out);
      out.close();
   }
}

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

$javac ReadingShapes.java
$java ReadingShapes

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

Shapes in the presentation:
Rectangle 1
Oval 1
Isosceles Triangle 1

带有各种形状的新添加幻灯片如下所示 −

ReadingShapes

Apache POI PPT - Formatting Text

可以使用 XSLFTextRun 类的方法设置演示文稿中的文本格式。为此,您需要通过选择幻灯片布局之一来创建一个 XSLFTextRun 类对象,如下所示 −

//create the empty 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 body = slide.getPlaceholder(1);

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

//adding new paragraph
XSLFTextParagraph paragraph = body.addNewTextParagraph();

//creating text run object
XSLFTextRun run = paragraph.addNewTextRun();

您可以使用 setFontSize() 设置演示文稿中文本的字体大小。

run.setFontColor(java.awt.Color.red);
run.setFontSize(24);

以下代码段展示了如何向演示文稿中的文本应用不同的格式化样式(粗体、斜体、下划线、删除线)。

//change the text into bold format
run.setBold(true);

//change the text it to italic format
run.setItalic(true)

// strike through the text
run.setStrikethrough(true);

//underline the text
run.setUnderlined(true);

要在段落之间换行,请使用 XSLFTextParagraph 类的 addLineBreak() ,如下所示 −

paragraph.addLineBreak();

以下是使用上述所有方法来格式化文本的完整程序 −

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.XSLFTextParagraph;
import org.apache.poi.xslf.usermodel.XSLFTextRun;
import org.apache.poi.xslf.usermodel.XSLFTextShape;

public class TextFormating {
   public static void main(String args[]) throws IOException {
      //creating an empty 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 body = slide.getPlaceholder(1);

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

      //adding new paragraph
      XSLFTextParagraph paragraph = body.addNewTextParagraph();

      //formatting line 1

      XSLFTextRun run1 = paragraph.addNewTextRun();
      run1.setText("This is a colored line");

      //setting color to the text
      run1.setFontColor(java.awt.Color.red);

      //setting font size to the text
      run1.setFontSize(24.0);

      //moving to the next line
      paragraph.addLineBreak();

      //formatting line 2

      XSLFTextRun run2 = paragraph.addNewTextRun();
      run2.setText("This is a bold line");
      run2.setFontColor(java.awt.Color.CYAN);

      //making the text bold
      run2.setBold(true);
      paragraph.addLineBreak();

      //formatting line 3

      XSLFTextRun run3 = paragraph.addNewTextRun();
      run3.setText(" This is a striked line");
      run3.setFontSize(12.0);

      //making the text italic
      run3.setItalic(true);

      //strike through the text
      run3.setStrikethrough(true);
      paragraph.addLineBreak();

      //formatting line 4

      XSLFTextRun run4 = paragraph.addNewTextRun();
      run4.setText(" This an underlined line");
      run4.setUnderlined(true);

      //underlining the text
      paragraph.addLineBreak();

      //creating a file object
      File file = new File(“TextFormat.pptx”);
      FileOutputStream out = new FileOutputStream(file);

      //saving the changes to a file
      ppt.write(out);
      out.close();
   }
}

将以上代码保存为 TextFormating.java ,然后从命令提示符编译并执行,如下所示 −

$javac TextFormating.java
$java TextFormating

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

Formatting completed successfully

带有格式化文本的幻灯片如下所示 −

FormattingText

Apache POI PPT - Merging

你可以使用 XMLSlideShow 类的 importContent() 方法合并多个演示文稿。以下是合并两个演示文稿的完整程序 −

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class MergingMultiplePresentations {

      public static void main(String args[]) throws IOException {

      //creating empty presentation
      XMLSlideShow ppt = new XMLSlideShow();

      //taking the two presentations that are to be merged
      String file1 = "presentation1.pptx";
      String file2 = "presentation2.pptx";
      String[] inputs = {file1, file2};

      for(String arg : inputs){

         FileInputStream inputstream = new FileInputStream(arg);
         XMLSlideShow src = new XMLSlideShow(inputstream);

         for(XSLFSlide srcSlide : src.getSlides()) {

            //merging the contents
            ppt.createSlide().importContent(srcSlide);
         }
      }

      String file3 = "combinedpresentation.pptx";

      //creating the file object
      FileOutputStream out = new FileOutputStream(file3);

      // saving the changes to a file
      ppt.write(out);
      System.out.println("Merging done successfully");
      out.close();
   }
}

将以上代码保存为 MergingMultiplePresentations.java ,然后从命令提示符编译并执行,如下所示 −

$javac MergingMultiplePresentations.java
$java MergingMultiplePresentations

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

Merging done successfully

以下快照显示第一个演示文稿 −

presentation1

以下快照显示第二个演示文稿 −

presentation2

以下是合并两个幻灯片后程序的输出结果。在这里,你可以看到将前面幻灯片的内容合并在一起。

combinedPresentation

Apache POI PPT - PPT to Image

你可以将演示文稿转换为图像文件。以下程序展示了如何执行此操作。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;

public class PptToImage {
   public static void main(String args[]) throws IOException {
      //creating an empty presentation
      File file=new File("pptToImage.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

      //getting the dimensions and size of the slide
      Dimension pgsize = ppt.getPageSize();
      List<XSLFSlide> slide = ppt.getSlides();
      BufferedImage img = null;
      for (int i = 0; i < slide.size(); i++) {
         img = new BufferedImage(pgsize.width, pgsize.height,BufferedImage.TYPE_INT_RGB);
         Graphics2D graphics = img.createGraphics();

         //clear the drawing area
         graphics.setPaint(Color.white);
         graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));

         //render
         slide.get(i).draw(graphics);
      }
      //creating an image file as output
      FileOutputStream out = new FileOutputStream("ppt_image.png");
      javax.imageio.ImageIO.write(img, "png", out);
      ppt.write(out);

      System.out.println("Image successfully created");
      out.close();
   }
}

将以上 Java 代码保存为 PpttoPNG.java ,然后从命令提示符编译并执行,如下所示 −

$javac PpttoPNG.java
$java PpttoPNG

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

Image created successfully

以下快照显示作为输入提供的演示文稿 −

presentation1

以下是指定位置创建的图像的快照。

ppt image