- Apache POI PPT Tutorial
- Apache POI PPT - Home
- Apache POI PPT - Overview
- Apache POI PPT - Java API Flavors
- Apache POI PPT - Installation
- Apache POI PPT - Classes & Methods
- Apache POI PPT - Presentation
- Apache POI PPT - Slide Layouts
- Apache POI PPT - Slide Management
- Apache POI PPT - Images
- Apache POI PPT - Creating Hyperlinks
- Apache POI PPT - Reading Shapes
- Apache POI PPT - Formatting Text
- Apache POI PPT - Merging
- Apache POI PPT - PPT to Image
- Apache POI PPT Resources
- Apache POI PPT - Quick Guide
- Apache POI PPT - Useful Resources
- Apache POI PPT - Discussion
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(可怕的幻灯片布局格式) - 用于阅读、创建和编辑 PowerPoint 演示文稿。
HDGF(可怕的图表格式) - 它包含 MS-Visio 二进制文件的类和方法。
HPBF(Horrible PuBlisher 格式) - 用于读取和写入 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;本章将讨论其中一些问题。
用于 Java 的 Aspose 幻灯片
Aspose Slides for Java 是一个纯许可的 Java PPT API,由供应商Aspose开发和分发。该API的最新版本是8.1.2,于2014年7月发布。它是一个丰富而重量级的API(普通Java类和AWT类的组合),用于设计可以读取、写入和管理幻灯片的PPT组件。
该 API 的常见用途如下:
- 构建动态演示文稿
- 渲染和打印高保真演示文稿
- 生成、编辑、转换和打印演示文稿
阿帕奇兴趣点
Apache POI 是 Apache 软件基金会提供的 100% 开源库。大多数中小型应用程序开发人员严重依赖 Apache POI (HSLF + XSLF)。支持PPT库的所有基本功能;然而,渲染和文本提取是其主要功能。下面给出的是用于 PPT 的 Apache POI 的架构。
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 版本“11.0.11”2021-04-20 LTS
Java(TM) SE 运行时环境 18.9(内部版本 11.0.11+9-LTS-194)
Java HotSpot(TM) 64 位服务器 VM 18.9(内部版本 11.0.11+9-LTS-194,混合模式)
平台 | 命令 | 样本输出 |
---|---|---|
Windows | 打开命令控制台并输入 - \>java –版本 |
java 版本“11.0.11”2021-04-20 LTS 打开JDK运行时环境18.9(内部版本11.0.11+9-LTS-194) 打开JDK 64位服务器VM(内部版本11.0.11+9-LTS-194,混合模式) |
Linux | 打开命令终端并输入 - $java –版本 |
java 版本“11.0.11”2021-04-20 LTS 打开JDK运行时环境18.9(内部版本11.0.11+9-LTS-194) 打开JDK 64位服务器VM(内部版本11.0.11+9-LTS-194,混合模式) |
我们假设本教程的读者已在其系统上安装了 Java SDK 版本 11.0.11。
如果您没有 Java SDK,请从www.oracle.com/technetwork/java/javase/downloads/index.html下载其当前版本并进行安装。
第 2 步 - 设置您的 Java 环境
将环境变量 JAVA_HOME 设置为指向计算机上安装 Java 的基本目录位置。例如,
先生。 | 平台及描述 |
---|---|
1 | Windows 将 JAVA_HOME 设置为 C:\ProgramFiles\java\jdk11.0.11 |
2 | Linux 导出 JAVA_HOME = /usr/local/java-current |
将 Java 编译器位置的完整路径附加到系统路径。
先生。 | 平台及描述 |
---|---|
1 | Windows 将字符串“C:\Program Files\Java\jdk11.0.11\bin”附加到系统变量 PATH 的末尾。 |
2 | Linux 导出路径=$PATH:$JAVA_HOME/bin/ |
如上所述,从命令提示符处执行命令java -version 。
步骤 3 - 安装 Apache POI 库
从https://poi.apache.org/download.html下载最新版本的 Apache POI ,并将其内容解压缩到一个文件夹,从该文件夹中可以将所需的库链接到您的 Java 程序。让我们假设这些文件收集在 C 驱动器上的文件夹中。
将所需jar的完整路径添加到 CLASSPATH 中,如下所示。
先生。 | 平台及描述 |
---|---|
1 | Windows 将以下字符串附加到用户变量的末尾 类路径 - 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 导出 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
序列号 | 构造函数及描述 |
---|---|
1 | XMLSlideShow(java.io.InputStream inputStream) 您可以通过向该类传递一个输入流类对象来实例化该类。 |
序列号 | 方法与说明 |
---|---|
1 | int addPicture(byte[]图片数据,int格式) 使用此方法,您可以将图片添加到演示文稿中。 |
2 | XSLFSlide createSlide() 在演示文稿中创建空白幻灯片。 |
3 | XSLFSlide createSlide(XSLFSlideLayout 布局) 创建具有给定幻灯片布局的幻灯片。 |
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 删除Slide(int 索引) 使用此方法,您可以从演示文稿中删除幻灯片。 |
9 | void setPageSize(java.awt.Dimension pgSize) 使用此方法,您可以重置页面大小。 |
10 | void setSlideOrder(XSLFSlide 幻灯片, int newIndex) 使用此方法,您可以重新排序幻灯片。 |
滑动
要创建和管理演示文稿中的幻灯片,需要使用XSLFSlide类的方法。下面提到这个类的一些重要方法。
类- XSLFSlide
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
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
序列号 | 方法及说明 |
---|---|
1 | XSLFBackground getBackground() 返回幻灯片母版的通用背景。 |
2 | XSLFSlideLayout getLayout(SlideLayout 类型) 返回 XSLFSlideLayout 对象。 |
3 | java.util.List<XSLFSlideLayout> getSlideLayouts() 返回此幻灯片母版中的所有幻灯片布局。 |
幻灯片布局
POI 库有一个名为XSLFSlideLayout的类,您可以使用它来管理幻灯片的布局。
类- XSLFSlideLayout
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
1 | 无效copyLayout(XSLFSlide幻灯片) 此方法会将占位符从此布局复制到给定的幻灯片。 |
文本段落
您可以使用XSLFTextParagraph类将内容写入幻灯片。下面提到的是这个类的一些重要方法。
类- XSLFTextParagraph
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
1 | XSLFTextRun addLineBreak() 在段落中插入换行符。 |
2 | XSLFTextRun addNewTextRun() 在段落中添加新的文本。 |
3 | 无效setBulletAutoNumber(ListAutoNumber方案,int startAt) 将自动编号的项目符号点应用于段落。 |
4 | void setIndent(双精度值) 设置段落中文本的缩进。 |
5 | 无效setLeftMargin(双值) 该方法用于添加段落的左边距。 |
6 | void setLineSpacing(双倍行距) 该方法用于设置段落中的行间距。 |
7 | void setTextAlign(TextAlign 对齐) 该方法用于设置段落的对齐方式。 |
文本运行
这是文本正文中最低级别的文本分隔。您有XSLFTextRun类来管理段落的文本运行。下面提到的是这个类的一些重要方法。
类- XSLFTextParagraph
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
1 | XSLFHyperlink createHyperlink() 在演示文稿中创建超链接。 |
2 | XSLFHyperlink getHyperlink() 该方法用于获取超链接。 |
3 | java.lang.String getText() 以 Java 字符串形式返回此 Text 节点的值。 |
4 | void setBold(布尔粗体) 该方法用于将文本设置为粗体。 |
5 | 无效setCharacterSpacing(双spc) 设置文本串中字符之间的间距。 |
6 | void setFontColor(java.awt.Color 颜色) 设置文本的字体颜色。 |
7 | 无效setFontSize(双字体大小) 设置文本的字体大小。 |
8 | void setItalic(布尔斜体) 该方法用于使段落变为斜体。 |
9 | void setStrikethrough(布尔罢工) 此方法用于将一系列文本格式化为删除线文本。 |
10 | void setSubscript(布尔标志) 该方法用于将文本格式化为下标。 |
11 | void setSuperscript(布尔标志) 此方法用于将本次运行中的文本格式化为上标。 |
12 | void setText(java.lang.String 文本) 该方法用于设置运行中的文本。 |
13 | void setUnderline(布尔下划线) 此方法用于在文本串中为文本添加下划线。 |
文字形状
在 PPT 中,我们有可以在其中容纳文本的形状。我们可以使用XSLFTextShape类来管理这些。下面提到的是这个类的一些重要方法。
类- XSLFTextShape
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
1 | void setPlaceholder(Placeholder 占位符) 使用此方法,您可以选择一个占位符。 |
2 | 占位符 getTextType() 返回当前占位符的类型。 |
3 | 无效的clearText() 清除当前文本形状的文本区域。 |
4 | XSLFTextParagraph addNewTextParagraph() 向形状添加新段落。 |
5 | 无效drawContent(java.awt.Graphics2D图形) 此方法允许您在幻灯片上绘制任何内容。 |
超级链接
POI 库有一个名为XSLFHyperlink 的类,您可以使用它在演示文稿中创建超链接。下面提到的是这个类的一些重要方法。
类- XSLFHyperlink
包- org.apache.poi.xslf.usermodel
序列号 | 方法及说明 |
---|---|
1 | java.net.URI getTargetURL() 返回演示文稿幻灯片中存在的 URL。 |
2 | void setAddress(java.lang.String 地址) 此方法用于将地址设置为 URL。 |
3 | void setAddress(XSLFSlide 幻灯片) 将地址设置为演示文稿幻灯片中存在的 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 { //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 文档如下所示 -
编辑现有演示文稿
要打开现有演示文稿,请实例化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 并将幻灯片添加到现有 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 文档如下所示 -
添加幻灯片到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 { //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 版提供的一些示例幻灯片布局。
标题布局
让我们使用标题布局在 PPT 中创建幻灯片。请按照以下步骤操作 -
步骤 1 - 通过实例化XMLSlideShow类来创建一个空演示文稿,如下所示。
XMLSlideShow ppt = new XMLSlideShow();
步骤 2 - 使用getSlideMasters()方法获取幻灯片母版列表。此后,使用索引选择所需的幻灯片母版,如下所示。
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[0];
这里我们获取默认的幻灯片母版,它位于幻灯片母版数组的第 0个位置。
步骤 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); //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 文档如下所示 -
标题和内容布局
让我们使用标题和内容布局在 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); //setting the title 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 { //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 文档如下所示 -
同样,您也可以创建具有不同布局的幻灯片。
Apache POI PPT - 幻灯片管理
完成本章后,您将能够对幻灯片进行删除、重新排序以及执行读写操作。
更换幻灯片
我们可以使用XMLSlideShow类的setPageSize()方法更改幻灯片的页面大小。
最初创建一个演示文稿,如下所示 -
File file = new File("C://POIPPT//Examples// TitleAndContentLayout.pptx"); //create presentation 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 { //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
下面给出的是更改幻灯片大小之前演示文稿的快照 -
更改大小后幻灯片显示如下 -
重新排序幻灯片
您可以使用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
下面给出的是重新排序幻灯片之前演示文稿的快照 -
重新排序幻灯片后,演示文稿如下所示。在这里,我们选择了带有图像的幻灯片并将其移动到顶部。
删除幻灯片
您可以使用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
下面的快照是删除幻灯片之前的演示文稿 -
删除幻灯片后,演示文稿如下所示 -
Apache POI PPT - 图像
在本章中,您将学习如何向 PPT 添加图像以及如何从中读取图像。
添加图像
您可以使用XSLFSlide的createPicture()方法将图像添加到演示文稿中。该方法接受字节数组格式的图像。因此,您必须创建要添加到演示文稿中的图像的字节数组。
按照给定的过程将图像添加到演示文稿中。使用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
新添加的带有图像的幻灯片的演示文稿如下所示 -
读图
您可以使用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
Apache POI PPT - 创建超链接
在本章中,您将学习如何在演示文稿中创建超链接。
创建超链接
您可以使用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
新添加的幻灯片及其正文中的超链接如下所示 -
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 { //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
新添加的具有各种形状的幻灯片如下所示 -
Apache POI PPT - 格式化文本
演示文稿中的文本可以使用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 underli