Apache Poi Ppt 简明教程
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 的组件列表如下 -
-
POIFS (Poor Obfuscation Implementation File System) − 此组件是所有其他 POI 元素的基本因素。它用于明确读取不同文件。
-
HSSF (Horrible SpreadSheet Format) − 用于读取和写入 MS-Excel 文件的 .xls 格式。
-
XSSF (XML SpreadSheet Format) − 用于 MS-Excel 的 .xlsx 文件格式。
-
HPSF (Horrible Property Set Format) − 它用于提取 MS-Office 文件的属性集。
-
HWPF (Horrible Word Processor Format) − 用于读取和写入 MS-Word 的 .doc 扩展文件。
-
XWPF (XML Word Processor Format) − 用于读取和写入 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 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;本章中考虑了其中一些。
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) |
-
我们假设本教程的读者已在他们的系统中安装了 Java SDK 版本 11.0.11。
-
如果您没有 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 <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) 使用这种方法,您可重新排列幻灯片。 |
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<XSLFSlideLayout> 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) 此方法允许您在幻灯片上绘制任意内容。 |
HyperLink
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 文档显示如下 −
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 文档如下所示 −
将幻灯片添加到 PPT 后,你可以在幻灯片上添加、执行、读取和写入操作。
Apache POI PPT - Slide Layouts
在上一章中,你已经了解了如何创建空幻灯片以及如何向其中添加幻灯片。在本章中,您将学习如何获取可用幻灯片的列表,以及如何创建具有不同布局的幻灯片。
Available Slide layouts
PowerPoint 演示文稿具有幻灯片布局,您可以选择所需布局来编辑幻灯片。首先,让我们找出所有可用幻灯片布局的列表。
-
有不同的幻灯片母版,并且在每个幻灯片母版中,都有多个幻灯片布局。
-
你可以使用 XMLSlideShow 类的 getSlideMasters() 方法来获取幻灯片母版列表。
-
你可以使用 XSLFSlideMaster 类的 getSlideLayouts() 方法从每个幻灯片母版中获取幻灯片布局列表。
-
你可以使用 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 版本的幻灯片布局示例。
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 文档显示如下所示 -
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 文档显示如下所示 -
以相同的方式,您也可以创建具有不同版式的幻灯片。
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
以下是更改幻灯片大小之前的演示文稿的快照 -
更改大小后,幻灯片如下所示 -
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
下面是重新排序幻灯片前的演示文稿的快照:
重新排序幻灯片后,演示文稿会以如下方式出现。在这里,我们选中包括图像的幻灯片并将其移到顶部。
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
以下快照显示的是删除幻灯片前的演示文稿:
删除幻灯片后,演示文稿如下所示 −
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
带有新添加幻灯片的演示文稿(其中包含图像)如下所示 −
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
Apache POI PPT - Creating Hyperlinks
在本章中,你将学习如何在演示文稿中创建超链接。
Creating Hyperlinks
你可以使用 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 - 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
带有各种形状的新添加幻灯片如下所示 −
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
带有格式化文本的幻灯片如下所示 −
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
以下快照显示第一个演示文稿 −
以下快照显示第二个演示文稿 −
以下是合并两个幻灯片后程序的输出结果。在这里,你可以看到将前面幻灯片的内容合并在一起。
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
以下快照显示作为输入提供的演示文稿 −
以下是指定位置创建的图像的快照。