Apache POI PPT - 快速指南

Apache POI PPT - 概述

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

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

什么是 Apache POI?

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

Apache POI 的组件

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

  • POIFS(糟糕的混淆实现文件系统) − 此组件是所有其他 POI 元素的基本因素。它用于显式读取不同的文件。

  • HSSF(可怕的电子表格格式) − 它用于读取和写入 MS-Excel 文件的 .xls 格式。

  • XSSF(XML 电子表格格式) − 它用于 MS-Excel 的 .xlsx 文件格式。

  • HPSF(可怕的属性集格式) − 它用于提取 MS-Office 文件的属性集。

  • HWPF(可怕的文字处理器格式) −它用于读取和写入 MS-Word 的 .doc 扩展文件。

  • XWPF(XML 文字处理器格式) − 它用于读取和写入 MS-Word 的 .docx 扩展文件。

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

  • HDGF(Horrible DiaGram Format) − 它包含 MS-Visio 二进制文件的类和方法。

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

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

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

Java PPT API 的风格

本章将带您了解 Java PowerPoint API 的一些风格及其功能。有许多供应商提供 Java PPT 相关 API;本章将介绍其中一些。

Aspose Slides for Java

Aspose slides for Java 是一个纯授权的 Java PPT API,由供应商 Aspose 开发和分发。该API的最新版本是8.1.2,发布于2014年7月。它是一个功能丰富且功能强大的API(纯Java类和AWT类的组合),用于设计可以读取、写入和管理幻灯片的PPT组件。

该API的常见用途如下 −

  • 构建动态演示文稿
  • 渲染和打印高保真演示文稿
  • 生成、编辑、转换和打印演示文稿

Apache POI

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

POI Flavors

Apache POI PPT - 安装

本章将带您了解在基于 Windows 和 Linux 的系统上设置 Apache POI 的过程。只需几个简单的步骤,即可轻松安装 Apache POI 并将其与您当前的 Java 环境集成,无需任何复杂的设置程序。安装时需要用户管理。

系统要求

JDK Java SE 2 JDK 1.5 或更高版本
内存 1 GB RAM(推荐)
磁盘空间 无最低要求
操作系统版本 Windows XP 或更高版本,Linux

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

步骤 1 −验证您的 Java 安装

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

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

java version "11.0.11" 2021-04-20 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

平台 命令 示例输出
Windows

打开命令控制台并输入 −

\>java –version

java version "11.0.11" 2021-04-20 LTS

Open 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 LTS

Open 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)

第 2 步 − 设置您的 Java 环境

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

Sr.No. 平台和描述
1

Windows

将 JAVA_HOME 设置为 C:\ProgramFiles\java\jdk11.0.11

2

Linux

导出 JAVA_HOME = /usr/local/java-current

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

Sr.No. 平台 &描述
1

Windows

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

2

Linux

导出 PATH = $PATH:$JAVA_HOME/bin/

按照上述说明从命令提示符执行命令 java -version

步骤 3 −安装 Apache POI 库

https://poi.apache.org/download.html 下载最新版本的 Apache POI,并将其内容解压缩到一个文件夹,从该文件夹中可以将所需的库链接到您的 Java 程序。我们假设文件收集在 C 盘上的一个文件夹中。

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

Sr.No. 平台和描述
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.jar

C\poi-bin-5.1.0\ooxml-lib\commons-logging-1.2.jar

C\poi-bin-5.1.0\ooxml-lib\curvesapi-1.06.jar

C\poi-bin-5.1.0\ooxml-lib\slf4j-api-1.7.32.jar

C\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 - 类和方法

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

演示文稿

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

− XMLSlideShow

− org.apache.poi.xslf.usermodel

S.No 构造函数 &描述
1

XMLSlideShow(java.io.InputStream inputStream)

您可以通过将 inputstream 类对象传递给它来实例化此类。

S.No 方法 &描述
1

int addPicture (byte[] pictureData, int 格式)

使用此方法,您可以向演示文稿添加图片。

2

XSLFSlide createSlide()

在演示文稿中创建空白幻灯片。

3

XSLFSlide createSlide(XSLFSlideLayout layout)

使用给定的幻灯片布局创建幻灯片。

4

java.util.List <XSLFPictureData> getPictureData()

返回演示文稿中所有图片的数组。

5

java.awt.Dimension getPageSize()

使用此方法,您可以了解当前页面大小。

6

java.util.List<XSLFSlideMaster> getSlideMasters()

返回演示文稿中所有幻灯片的列表。

7

java.util.List<XSLFSlide> getSlides()

返回演示文稿中的所有幻灯片。

8

XSLFSlide removeSlide(int index)

使用此方法,您可以从演示文稿中删除幻灯片。

9

void setPageSize(java.awt.Dimension pgSize)

使用此方法,您可以重置页面大小。

10

void setSlideOrder(XSLFSlide slide, int newIndex)

使用此方法,您可以重新排序幻灯片。

幻灯片

要创建和管理演示文稿中的幻灯片,需要使用 XSLFSlide 类的方法。下面提到了该类的一些重要方法。

− XSLFSlide

− org.apache.poi.xslf.usermodel

S.No 方法与说明
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)

将另一张幻灯片的内容复制到此幻灯片。

幻灯片母版

它是演示文稿中具有不同幻灯片布局的组件。XSLFSlideMaster 类可让您访问它。下面提到了此类的一些重要方法。

− XSLFSlideMaster

− org.apache.poi.xslf.usermodel

S.No 方法 &描述
1

XSLFBackground getBackground()

返回幻灯片母版的通用背景。

2

XSLFSlideLayout getLayout(SlideLayout type)

返回 XSLFSlideLayout 对象。

3

java.util.List<XSLFSlideLayout> getSlideLayouts()

返回此幻灯片母版中的所有幻灯片布局。

幻灯片布局

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

− XSLFSlideLayout

− org.apache.poi.xslf.usermodel

S.No 方法和说明
1

void copyLayout(XSLFSlide slide)

此方法将占位符从此布局复制到给定的幻灯片。

文本段落

您可以使用 XSLFTextParagraph 类将内容写入幻灯片。下面提到的是此类的一些重要方法。

− XSLFTextParagraph

− org.apache.poi.xslf.usermodel

S.No 方法 &描述
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)

此方法用于设置要设置为段落。

文本运行

这是文本主体内文本分隔的最低级别。您有 XSLFTextRun 类来管理段落的文本运行。下面提到的是此类的一些重要方法。

− XSLFTextParagraph

− org.apache.poi.xslf.usermodel

S.No 方法和说明
1

XSLFHyperlink createHyperlink()

在演示文稿中创建超链接。

2

XSLFHyperlink getHyperlink()

此方法用于获取超链接。

3

java.lang.String getText()

以 Java 字符串形式返回此 Text 节点的值。

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)

此方法用于为文本行中的文本添加下划线。

文本形状

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

− XSLFTextShape

− org.apache.poi.xslf.usermodel

S.No 方法和说明
1

void setPlaceholder(Placeholder placeholder)

使用此方法,您可以选择一个占位符。

2

Placeholder getTextType()

返回当前占位符的类型。

3

void clearText()

清除当前文本形状的文本区域。

4

XSLFTextParagraph addNewTextParagraph()

向形状添加新的段落。

5

void drawContent(java.awt.Graphics2D graphics)

此方法允许您在幻灯片上绘制任何内容。

超链接

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

− XSLFHyperlink

− org.apache.poi.xslf.usermodel

S.No 方法 &描述
1

java.net.URI getTargetURL()

返回演示文稿幻灯片中存在的 URL。

2

void setAddress(java.lang.String address)

此方法用于将地址设置为 URL。

3

void setAddress(XSLFSlide slide)

将地址设置为演示文稿幻灯片中存在的 URL。

Apache POI PPT - 演示文稿

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

创建空演示文稿

要创建空演示文稿,您必须实例化 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 {
        //创建一个新的空幻灯片
        XMLSlideShow ppt = new XMLSlideShow();
        
        //创建一个 FileOutputStream 对象
        File file = new File("example1.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件
        ppt.write(out);
        System.out.println("演示文稿创建成功");
        out.close();
   }
}

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

$javac CreatePresentation.java
$java CreatePresentation

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

演示文稿创建成功

空白 PowerPoint 文档显示如下 −

Example PowerPoint

编辑现有演示文稿

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

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

您可以使用 XMLSlideShow 类的 createSlide() 方法将幻灯片添加到演示文稿中,该类位于 org.poi.xslf.usermodel 包中。

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 {
        //打开现有幻灯片
        File file = new File("example1.pptx");
        FileInputStream inputstream = new FileInputStream(file);
        XMLSlideShow ppt = new XMLSlideShow(inputstream);
        
        //将幻灯片添加到幻灯片中
        XSLFSlide slide1 = ppt.createSlide();
        XSLFSlide slide2 = ppt.createSlide();
        
        //保存更改
        FileOutputStream out = new FileOutputStream(file);
        ppt.write(out);
        
        System.out.println("演示文稿已成功编辑");
        out.close();
    }
}

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

$javac EditPresentation.java
$java EditPresentation

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

演示文稿已成功编辑

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

Edit Example

将幻灯片添加到 PPT 后,您可以对幻灯片进行添加、执行、读取和写入操作。

Apache POI PPT - 幻灯片布局

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

可用的幻灯片布局

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

  • 有不同的幻灯片母版,每个幻灯片母版中都有多个幻灯片布局。

  • 您可以使用 XMLSlideShow 类的 getSlideMasters() 方法获取幻灯片母版列表。

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

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

注意 −所有这些类都属于 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 {
      //创建一个空的演示文稿
      XMLSlideShow ppt = new XMLSlideShow();
      System.out.println("Available slide layouts:");
   
      //获取所有幻灯片母版的列表
      for(XSLFSlideMaster master : ppt.getSlideMasters()) {
         //获取每个幻灯片母版中的布局列表
         for(XSLFSlideLayout layout : master.getSlideLayouts()) {
            //获取可用幻灯片的列表
            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 版中可用的一些示例幻灯片布局。

示例幻灯片布局

标题布局

让我们使用标题布局在 PPT 中创建幻灯片。按照下面给出的步骤 −

步骤 1 − 通过实例化 XMLSlideShow 类创建一个空演示文稿,如下所示。

XMLSlideShow ppt = new XMLSlideShow();

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

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

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

步骤 3 − 使用 XSLFSlideMaster 类的 getLayout() 方法获取所需的布局。此方法接受一个参数,您必须传递 SlideLayoutclass 的一个静态变量,该变量代表我们所需的布局。这个类中有多个变量,每个变量代表一个幻灯片布局。

下面给出的代码片段显示了如何创建标题布局 −

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

步骤 4 − 通过将幻灯片布局对象作为参数传递来创建新幻灯片。

XSLFSlide slide = ppt.createSlide(titleLayout);

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

XSLFTextShape title1 = slide.getPlaceholder(0);
//设置标题 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 {
        //创建演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取幻灯片母版对象
        XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
        
        //获取所需的幻灯片布局
        XSLFSlideLayout titleLayout = slideMaster.getLayout(SlideLayout.TITLE);
        
        //创建带有标题布局的幻灯片
        XSLFSlide slide1 = ppt.createSlide(titleLayout);
        
        //选择其中的占位符
        XSLFTextShape title1 = slide1.getPlaceholder(0);
        
        //设置标题初始化
        title1.setText("Tutorials point");
        
        //创建文件对象
        File file = new File("F://Titlelayout.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存在 PPt 文档中
        ppt.write(out);
        System.out.println("幻灯片创建成功");
        out.close();  
   }
}

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

$javac TitleLayout.java
$java TitleLayout

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

幻灯片创建成功

添加新标题布局幻灯片的 PPT 文档显示如下 −

TitleLayOut

标题和内容布局

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

步骤 1 −通过实例化 XMLSlideShow 类创建一个空演示文稿,如下所示。

XMLSlideShow ppt = new XMLSlideShow();

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

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

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

步骤 3 − 使用 XSLFSlideMaster 类的 getLayout() 方法获取所需的布局。此方法接受一个参数,您必须传递 SlideLayout 类的一个静态变量,该变量代表我们所需的布局。此类中有几个变量代表幻灯片布局。

以下代码片段显示如何创建标题和内容布局 −

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

步骤 4 − 通过将幻灯片布局对象作为参数传递来创建新幻灯片。

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

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

XSLFTextShape title1 = slide1.getPlaceholder(1);
//设置标题 init
title1.setText("Introduction");

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

body.clearText();

第 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 {
        //创建演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取幻灯片母版对象
        XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
        
        //从指定列表中选择一个布局
        XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
        
        //创建带有标题和内容布局的幻灯片
        XSLFSlide slide = ppt.createSlide(slidelayout);
        
        //选择标题占位符
        XSLFTextShape title = slide.getPlaceholder(0);
        
        //在其中设置标题
        title.setText("introduction");
        
        //选择正文占位符
        XSLFTextShape body = slide.getPlaceholder(1);
        
        //清除幻灯片中的现有文本
        body.clearText();
        
        //添加新段落
        body.addNewTextParagraph().addNewTextRun().setText("这是我的第一个幻灯片主体");
        
        //创建文件对象
        File file = new File("contentlayout.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存在文件中
        ppt.write(out);
        System.out.println("幻灯片创建成功");
        out.close();              
   }
}

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

$javac TitleLayout.java
$java TitleLayout

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

幻灯片创建成功

新添加标题布局幻灯片的 PPT 文档如下所示 −

TitleAndContentLayout

以同样的方式,您也可以创建具有不同布局的幻灯片。

Apache POI PPT - 幻灯片管理

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

更改幻灯片

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

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

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

//创建演示文稿
XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));

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

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 {
        //创建文件对象
        File file = new File("TitleAndContentLayout.pptx");
        
        //创建演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取当前页面大小
        java.awt.Dimension pgsize = ppt.getPageSize();
        int pgw = pgsize.width; //幻灯片宽度(以点为单位)
        int pgh = pgsize.height; //幻灯片高度(以点为单位)
        
        System.out.println("当前 PPT 页面大小为:");
        System.out.println("宽度:" + pgw);
        System.out.println("高度:" + pgh);
        
        //设置新页面大小
        ppt.setPageSize(new java.awt.Dimension(2048,1536));
        
        //创建文件对象
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件
        ppt.write(out);
        System.out.println("幻灯片大小已更改为给定尺寸");
        out.close();
   }
}

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

$javac ChangingSlide.java
$java ChangingSlide

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

当前 PPT 页面大小为:
宽度:720
高度:540
幻灯片大小更改为给定尺寸

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

TitleAndContentLayout

更改大小后幻灯片显示如下 −

SlideAfterChange

重新排序幻灯片

您可以使用 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() 方法更改顺序,如下所示 −

//选择第四张幻灯片
XSLFSlide selectesdslide = slides.get(4);

//将其置于顶部
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 {
        //打开现有演示文稿
        File file = new File("example1.pptx");
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
        
        //获取幻灯片
        List<XSLFSlide> slides = ppt.getSlides();
        
        //选择第四张幻灯片
        XSLFSlide selectesdslide = slides.get(13);
        
        //将其置于顶部
        ppt.setSlideOrder(selectesdslide, 0);
        
        //创建文件对象
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件
        ppt.write(out);
        out.close();
   }
}

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

$javac ReorderSlide.java
$java ReorderSlide

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

幻灯片重新排序已完成

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

Before Reorder

重新排序幻灯片后,演示文稿显示如下。这里我们选择了带图片的幻灯片并将其移至顶部。

After Reorder

删除幻灯片

您可以使用 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 {
        //打开现有幻灯片
        File file = new File("image.pptx");
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
        
        //删除幻灯片
        ppt.removeSlide(1);
        
        //创建文件对象
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到演示文稿
        ppt.write(out);
        out.close();
   }
}

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

$javac Deleteslide.java
$java Deleteslide

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

幻灯片的重新排序已完成

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

After Reorder

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

Delete Slides

Apache POI PPT - 图像

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

添加图像

您可以使用 XSLFSlidecreatePicture() 方法将图像添加到演示文稿中。此方法接受字节数组格式的图像。因此,您必须创建要添加到演示文稿中的图像的字节数组。

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

XMLSlideShow ppt = new XMLSlideShow();

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

XSLFSlide slide = ppt.createSlide();

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

//读取图像
File image = new File("C://POIPPT//boy.jpg");

//将其转换为字节数组
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 {
        //创建演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //在其中创建幻灯片
        XSLFSlide slide = ppt.createSlide();
        
        //读取图像
        File image = new File("C://POIPPT//boy.jpg");
        
        //将其转换为字节数组
        byte[] picture = IOUtils.toByteArray(new FileInputStream(image));
        
        //将图像添加到演示文稿
        XSLFPictureData idx = ppt.addPicture(picture, PictureType.PNG);
        
        //创建带有给定图片的幻灯片
        XSLFPictureShape pic = slide.createPicture(idx);
        
        //创建文件对象
        File file = new File("addingimage.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件
        ppt.write(out);
        System.out.println("图片添加成功");
        out.close();
   }
}

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

$javac AddingImage.java
$java AddingImage

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

幻灯片的重新排序已完成

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

Adding 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 {
        //打开现有演示文稿
        File file = new File("addingimage.pptx");
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
        
        //读取演示文稿中的所有图片
        for(XSLFPictureData data : ppt.getPictureData()){
            byte[] bytes = data.getData();
            String fileName = data.getFileName();
            PictureType pictureFormat = data.getType();
            System.out.println("图片名称:" + fileName);
            System.out.println("图片格式:" + pictureFormat);
        }
        //将更改保存到文件
        FileOutputStream out = new FileOutputStream(file);
        ppt.write(out);
        out.close();
   }
}

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

$javac Readingimage.java
$java Readingimage

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

图片名称:image1.png
图片格式:6

Apache POI PPT - 创建超链接

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

创建超链接

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

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

XMLSlideShow ppt = new XMLSlideShow();

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

//创建一个空演示文稿
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];

//创建带有标题和内容布局的幻灯片
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
XSLFSlide slide = ppt.createSlide(slidelayout);

//选择正文占位符
XSLFTextShape body = slide.getPlaceholder(1);

//清除幻灯片中的现有文本
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 {
        //创建一个空的演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取幻灯片母版对象
        XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
        
        //从指定列表中选择一个布局
        XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
        
        //创建带有标题和内容布局的幻灯片
        XSLFSlide slide = ppt.createSlide(slidelayout);
        
        //选择标题占位符
        XSLFTextShape body = slide.getPlaceholder(1);
        
        //清除幻灯片中的现有文本
        body.clearText();
        
        //添加新段落
        XSLFTextRun textRun = body.addNewTextParagraph().addNewTextRun();
        
        //设置文本
        textRun.setText("Tutorials point");
        
        //创建超链接
        XSLFHyperlink link = textRun.createHyperlink();
        
        //设置链接地址
        link.setAddress("https://www.tutorialspoint.com/");
        
        //创建文件对象
        File file = new File("hyperlink.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件中
        ppt.write(out);
        System.out.println("幻灯片创建成功");
        out.close();
   }
}

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

$javac CreatingHyperlinks.java
$java CreatingHyperlinks

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

幻灯片创建成功

新添加的幻灯片正文中包含超链接,如下所示 −

创建超链接

Apache POI PPT - 读取形状

您可以使用 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 {
        //创建幻灯片
        File file = new File("shapes.pptx");
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
        
        //获取幻灯片
        List<XSLFSlide> slide = ppt.getSlides();
        
        //获取演示文稿中的形状
        System.out.println("演示文稿中的形状:");
        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

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

Reading Shapes

Apache POI PPT - 格式化文本

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

//创建空演示文稿
XMLSlideShow ppt = new XMLSlideShow();

//获取幻灯片母版对象
XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);

//从指定列表中选择一个布局
XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);

//创建具有标题和内容布局的幻灯片
XSLFSlide slide = ppt.createSlide(slidelayout);

//选择标题占位符
XSLFTextShape body = slide.getPlaceholder(1);

//清除幻灯片中的现有文本
body.clearText();

//添加新段落
XSLFTextParagraph passage = body.addNewTextParagraph();

//创建文本运行对象
XSLFTextRun run = passage.addNewTextRun();

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

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

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

//将文本更改为粗体格式
run.setBold(true);

//将文本更改为斜体格式
run.setItalic(true)

//删除文本
run.setStrikethrough(true);

//为文本加下划线
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 {
        //创建一个空的演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取幻灯片母版对象
        XSLFSlideMaster slideMaster = ppt.getSlideMasters().get(0);
        
        //从指定列表中选择一个布局
        XSLFSlideLayout slidelayout = slideMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
        
        //创建带有标题和内容布局的幻灯片
        XSLFSlide slide = ppt.createSlide(slidelayout);
        
        //选择标题占位符
        XSLFTextShape body = slide.getPlaceholder(1);
        
        //清除幻灯片中的现有文本
        body.clearText();
        
        //添加新段落
        XSLFTextParagraph passage = body.addNewTextParagraph();
        
        //格式化第 1 行
        
        XSLFTextRun run1 = passage.addNewTextRun();
        run1.setText("这是一条彩色线");
        
        //设置文本颜色
        run1.setFontColor(java.awt.Color.red);
        
        //设置文本字体大小
        run1.setFontSize(24.0);
        
        //移动到下一行
        passage.addLineBreak();
        
        //格式化第 2 行
        
        XSLFTextRun run2 = passage.addNewTextRun();
        run2.setText("This is a bold line");
        run2.setFontColor(java.awt.Color.CYAN);
        
        //使文本变为粗体
        run2.setBold(true);
        passage.addLineBreak();
        
        //格式化第 3 行
        
        XSLFTextRun run3 = passage.addNewTextRun();
        run3.setText(" This is a striked line");
        run3.setFontSize(12.0);
        
        //使文本变为斜体
        run3.setItalic(true);
        
        //删除文本
        run3.setStrikethrough(true);
        passage.addLineBreak();
        
        //格式化第 4 行
        
        XSLFTextRun run4 = passage.addNewTextRun();
        run4.setText(" 这是一条下划线");
        run4.setUnderlined(true);
        
        //给文本加下划线
        passage.addLineBreak();
        
        //创建文件对象
        File file = new File("TextFormat.pptx");
        FileOutputStream out = new FileOutputStream(file);
        
        //将更改保存到文件
        ppt.write(out);
        out.close();
   }
}

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

$javac TextFormating.java
$java TextFormating

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

格式化已成功完成

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

Formatting Text

Apache POI PPT - 合并

您可以使用 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 {
      
        //创建空演示文稿
        XMLSlideShow ppt = new XMLSlideShow();
        
        //获取要合并的两个演示文稿
        String file1 = "presentation1.pptx";
        String file2 = "presentation2.pptx";
        String[] input = {file1, file2};
        
        for(String arg : input){
        
            FileInputStream inputstream = new FileInputStream(arg);
            XMLSlideShow src = new XMLSlideShow(inputstream);
            
            for(XSLFSlide srcSlide : src.getSlides()) {
            
                //合并内容
                ppt.createSlide().importContent(srcSlide);
            }
        }
        
        String file3 = "combinedpresentation.pptx";
        
        //创建文件对象
        FileOutputStream out = new FileOutputStream(file3);
        
        // 将更改保存到文件
        ppt.write(out);
        System.out.println("合并成功");
        out.close();
   }
}

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

$javac MergingMultiplePresentations.java
$java MergingMultiplePresentations

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

合并成功完成

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

Presentation1

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

Presentation2

下面是合并两张幻灯片后程序的输出。在这里您可以看到合并在一起的早期幻灯片的内容。

Combined Presentation

Apache POI PPT - PPT 转图像

您可以将演示文稿转换为图像文件。以下程序显示了如何操作。

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 {
        //创建一个空的演示文稿
        File file=new File("pptToImage.pptx");
        XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
        
        //获取幻灯片的尺寸和大小
        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();
            
            //清除绘图区域
            graphics.setPaint(Color.white);
            graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
            
            //渲染
            slide.get(i).draw(graphics);
        }
        //创建一个图像文件作为输出
        FileOutputStream out = new FileOutputStream("ppt_image.png");
        javax.imageio.ImageIO.write(img, "png", out);
        ppt.write(out);
        
        System.out.println("图像创建成功");
        out.close();
   }
}

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

$javac PpttoPNG.java
$java PpttoPNG

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

图像创建成功

以下快照显示了作为输入给出的演示文稿 −

presentation1

下面给出的是在指定位置创建的图像的快照。

PPT Image