Apache POI PPT - 快速指南

2018-12-27 16:15 更新

Apache POI PPT - 概述

很多時候,需要一個軟件應(yīng)用程序來生成Microsoft Office文件格式的報告。 有時,應(yīng)用程序甚至希望接收MS- Office文件作為輸入數(shù)據(jù)。

任何希望生成MS Office文件作為輸出的Java程序員都必須使用預(yù)定義和只讀API來執(zhí)行此操作。

什么是Apache POI?

Apache POI是一個流行的API,允許程序員使用Java程序創(chuàng)建,修改和顯示MS-Office文件。 它是由Apache Software Foundation開發(fā)和發(fā)布的一個開源庫。 它包含用于解碼用戶輸入數(shù)據(jù)或?qū)⑽募D(zhuǎn)換為MS Office文檔的類和方法。

Apache POI的組件

Apache POI包含用于MS-Office的所有OLE2復(fù)合文檔的類和方法。 此API的組件列表如下:

  • POIFS(可疑混淆執(zhí)行文件系統(tǒng)):此組件是所有其他POI元素的基本因素。 它用于顯式讀取不同的文件。

  • HSSF(可怕的SpreadSheet格式):用于讀取和寫入.xls格式的MS-Excel文件。

  • XSSF(XML SpreadSheet格式):用于MS-Excel的.xlsx文件格式。

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

  • HWPF(可怕字處理器格式):用于讀取和寫入MS-Word的擴(kuò)展文件 .doc

  • XWPF(XML字處理器格式):用于讀取和寫入MS-Word的.docx擴(kuò)展文件。

  • HSLF(可怕的幻燈片布局格式):用于閱讀,創(chuàng)建和編輯PowerPoint演示文稿。

  • HDGF(Horrible DiaGram格式):它包含MS-Visio二進(jìn)制文件的類和方法。

  • HPBF(Horrible PuBlisher格式):用于讀取和寫入MS-Publisher文件。

本教程將指導(dǎo)您完成使用Java進(jìn)行Microsoft PowerPoint演示文稿的過程。 因此,討論限于 XSLF組件。

注意:舊版本的POI支持二進(jìn)制文件格式,如doc,xls,ppt等。版本3.5起,POI支持MS- Office的OOXML文件格式,如docx,xlsx,pptx等。

Java PPT API的口味

本章將介紹Java PowerPoint API及其功能的一些風(fēng)格。 有許多供應(yīng)商提供Java PPT相關(guān)的API; 其中一些在本章中考慮。

Aspose Slides for Java

用于Java的Aspose幻燈片是一個純許可的Java PPT API,由供應(yīng)商 Aspose 開發(fā)和發(fā)布。 這個API的最新版本是8.1.2,于2014年7月發(fā)布。它是一個豐富而重的API(純Java類和AWT類的組合),用于設(shè)計可以讀取,寫入和管理幻燈片的PPT組件。

此API的常見用途如下:

  • Build dynamic presentations
  • Render and print high-fidelity presentations
  • Generate, edit, convert, and print presentations

Apache POI

Apache POI是Apache Software Foundation提供的一個100%開源庫。 大多數(shù)中小型應(yīng)用程序開發(fā)人員嚴(yán)重依賴Apache POI(HSLF + XSLF)。 它支持PPT庫的所有基本功能; 然而,渲染和文本提取是其主要特征。 下面給出了用于PPT的Apache POI的架構(gòu)。

Apache POI PPT - 安裝

本章將介紹在基于Windows和Linux的系統(tǒng)上設(shè)置Apache POI的過程。 Apache POI可以輕松地安裝并與您當(dāng)前的Java環(huán)境集成,遵循幾個簡單的步驟,沒有任何復(fù)雜的設(shè)置過程。 安裝需要用戶管理。

系統(tǒng)要求

JDKJava SE 2 JDK 1.5或更高版本
內(nèi)存1 GB RAM(推薦)
磁盤空間無最低要求
操作系統(tǒng)版本Windows XP或以上版本,Linux

現(xiàn)在讓我們繼續(xù)安裝Apache POI的步驟。

步驟1:驗證Java安裝

首先,您需要在系統(tǒng)上安裝Java軟件開發(fā)工具包(SDK)。 要驗證此,請根據(jù)您正在處理的平臺執(zhí)行以下兩個命令。

如果Java安裝已正確完成,那么它將顯示Java安裝的當(dāng)前版本和規(guī)范。 下表給出了樣本輸出。

平臺命令示例輸出
Windows

打開命令控制臺并鍵入:

\> java -version

Java版本“1.7.0_60"

Java TM SE運(yùn)行時間

環(huán)境(build 1.7.0_60-b19)

Java Hotspot(TM)64位服務(wù)器

VM(構(gòu)建24.60-b09,混合模式)

Linux

打開命令終端并鍵入:

$ java -version

java版本“1.7.0_25"

打開JDK運(yùn)行時環(huán)境(rhel-2.3.10.4.el6_4-x86_64)

打開JDK 64位服務(wù)器虛擬機(jī)(構(gòu)建23.7-b01,混合模式)

步驟2:設(shè)置Java環(huán)境

將環(huán)境變量JAVA_HOME設(shè)置為指向計算機(jī)上安裝Java的基本目錄位置。 例如,

平臺描述
Windows將JAVA_HOME設(shè)置為 C:\ProgramFiles\java\jdk1.7.0_60
Linux導(dǎo)出JAVA_HOME = / usr / local / java-current

將Java編譯器位置的完整路徑附加到系統(tǒng)路徑。

描述描述
Windows將字符串"C:\Program Files\Java\jdk1.7.0_60\bin"附加到系統(tǒng)變量PATH的結(jié)尾。
Linux導(dǎo)出PATH = $ PATH:$ JAVA_HOME / bin /

如上所述,從命令提示符處執(zhí)行命令 java -version 。

步驟3:安裝Apache POI庫

http://poi.apache.org/download 下載最新版本的Apache POI。 html ,并將其內(nèi)容解壓縮到一個文件夾,從中可以將所需的庫鏈接到Java程序。 讓我們假設(shè)文件收集在C驅(qū)動器上的文件夾中。

以下圖像顯示已下載文件夾中的目錄和文件結(jié)構(gòu):

將上述圖片中突出顯示的五個 jars 的完整路徑添加到CLASSPATH。

描述描述
Windows

將以下字符串附加到用戶變量CLASSPATH的結(jié)尾:

“C:\poi-3.9\poi-3.9-20121203.jar;"

“C:\poi-3.9\poi-ooxml-3.9-20121203.jar;"

“C:\poi-3.9\poi-ooxml-schemas-3.9-20121203.jar;"

“C:\poi-3.9\ooxml-lib\dom4j-1.6.1.jar;"

“C:\poi-3.9\ooxml-lib\xmlbeans-2.3.0.jar;.;"

Linux

導(dǎo)出CLASSPATH = $ CLASSPATH:

/usr/share/poi-3.9/poi-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:

/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:

/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar

Apache POI PPT - 類和方法

在本章中,我們將了解Apache POI API下的幾個類和方法,這些對于使用Java程序處理PPT文件至關(guān)重要。

介紹

要創(chuàng)建和管理演示文稿,您在包 org.apache.poi.xslf.usermodel 中有一個名為XMLSlideShow的類。 下面給出了一些重要的方法和這個類的構(gòu)造函數(shù)。

:XMLSlideShow

:org.apache.poi.xslf.usermodel

S.No構(gòu)造函數(shù)和說明
1

XMLSlideShow(java.io.InputStream inputStream)

你可以通過傳遞一個inputstream類對象來實例化這個類。

S.No方法和描述
1

int addPicture(byte [] pictureData,int format)

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

2

XSLFSlide createSlide()

在演示文稿中創(chuàng)建空白幻燈片。

3

XSLFSlide createSlide(XSLFSlideLayout布局)

創(chuàng)建具有給定幻燈片布局的幻燈片。

4

java.util.List< XSLFPictureData> getAllPictures()

返回一個演示文稿中所有圖片的數(shù)組。

5

java.awt.Dimension getPageSize()

使用此方法,您可以了解當(dāng)前頁面大小。

6

XSLFSlideMaster [] getSlideMasters()

返回演示文稿中所有幻燈片的數(shù)組。

7

XSLFSlide [] getSlides()

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

8

XslFSlide removeSlide(int index)

使用此方法,您可以從演示文稿中刪除幻燈片。

9

void setPageSize(java.awt.Dimension pgSize)

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

10

void setSlideOrder(XSLFSlide slide,int newIndex)

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

滑動

要在演示文稿中創(chuàng)建和管理幻燈片,請使用 XSLFSlide 類的方法。 這一類的一些重要方法如下所述。

:XSLFSlide

套件:org.apache.poi.xslf.usermodel

S.No方法和描述
1

XSLFBackground getBackground()

返回 XSLFBackground 對象,可用于檢索幻燈片背景的顏色和錨點(diǎn)等詳細(xì)信息。 您還可以使用此對象在幻燈片中繪制形狀。

2

XSLFSlideLayout getSlideLayout()

提供對當(dāng)前幻燈片的 XSLFSlideLayout 對象的訪問。

3

XSLFSlideMaster getSlideMaster()

提供對當(dāng)前幻燈片的幻燈片母版的訪問。

4

XSLFTheme getTheme()

返回當(dāng)前幻燈片的 XSLFTheme 對象。

5

java.lang.String getTitle()

返回當(dāng)前幻燈片的標(biāo)題。

6

XSLFSlide importContent(XSLFSheet src)

將另一張幻燈片的內(nèi)容復(fù)制到此幻燈片。

幻燈片母版

它是演示文稿的組件具有不同的幻燈片布局。 XSLFSlideMaster 類可讓您訪問它。 下面提到這個類的一些重要方法。

:XSLFSlideMaster

套件:org.apache.poi.xslf.usermodel

S.No描述
1

XSLFBackground getBackground()

返回幻燈片母版的常用背景。

2

XSLFSlideLayout getLayout(SlideLayout type)

返回XSLFSlideLayout對象。

3

XSLFSlideLayout [] getSlideLayouts()

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

幻燈片布局

POI庫有一個名為 XSLFSlideLayout 的類,您可以使用它來管理幻燈片的布局。

:XSLFSlideLayout

套件:org.apache.poi.xslf.usermodel

描述方法和說明
1

void copyLayout(XSLFSlide幻燈片)

此方法會將占位符從此布局復(fù)制到給定幻燈片。

文本段落

您可以使用 XSLFTextParagraph 類別將內(nèi)容寫入幻燈片。 下面提到這個類的一些重要方法。

:XSLFTextParagraph

套件:org.apache.poi.xslf.usermodel

S.No方法和描述
1

XSLFTextRun addLineBreak()

在段落中插入換行符。

2

XSLFTextRun addNewTextRun()

在段落中添加新的文本行。

3

void setBulletAutoNumber(ListAutoNumber scheme,int startAt)

將自動編號的項目符號點(diǎn)應(yīng)用于段落。

4

void setIndent(double value)

將縮進(jìn)設(shè)置為段落中的文本。

5

void setLeftMargin(double value)

此方法用于添加段落的左邊距。

6

void setLineSpacing(double line spacing)

此方法用于在段落中設(shè)置行間距。

7

void setTextAlign(TextAlign align)

此方法用于設(shè)置要設(shè)置為段落的對齊方式。

文本運(yùn)行

這是文本正文中文本分隔的最低級別。 您可以使用 XSLFTextRun 類來管理段落的文本運(yùn)行。 下面提到這個類的一些重要方法。

:XSLFTextParagraph

套件:org.apache.poi.xslf.usermodel

S.No方法和描述
1

XSLFHyperlink createHyperlink()

在演示文稿中創(chuàng)建超鏈接。

2

XSLFHyperlink getHyperlink()

此方法用于獲取超鏈接。

3

java.lang.String getText()

以Java字符串形式返回此Text節(jié)點(diǎn)的值。

4

void setBold(boolean bold)

此方法用于以粗體設(shè)置文本。

5

void setCharacterSpacing(double spc)

設(shè)置文本運(yùn)行中的字符之間的間距。

6

void setFontColor(java.awt.Color color)

設(shè)置文本的字體顏色。

7

void setFontSize(double fontSize)

設(shè)置文本的字體大小。

8

void setItalic(boolean italic)

這個方法用于使段落斜體。

9

void setStrikethrough(boolean strike)

此方法用于將一段文本格式化為刪除線文本。

10

void setSubscript(boolean flag)

此方法用于將文本格式化為下標(biāo)。

11

void setSuperscript(boolean flag)

此方法用于將此運(yùn)行中的文本格式化為上標(biāo)。

12

void setText(java.lang.String text)

此方法用于在運(yùn)行中設(shè)置文本。

13

void setUnderline(Boolean underline)

此方法用于在文本運(yùn)行中對文本加下劃線。

文本形狀

在PPT中,我們有可以在其中保存文本的形狀。 我們可以使用 XSLFTextShape 類來管理這些。 下面提到這個類的一些重要方法。

:XSLFTextShape

套件:org.apache.poi.xslf.usermodel

S.No方法和描述
1

void setPlaceholder(Placeholder placeholder)

使用此方法,您可以選擇占位符。

2

Placeholder getTextType()

返回當(dāng)前占位符的類型。

3

void clearText()

清除當(dāng)前文本形狀的文本區(qū)域。

4

XSLFTextParagraph addNewTextParagraph()

向形狀添加新的段落運(yùn)行。

5

void drawContent(java.awt.Graphics2D graphics)

此方法允許您在幻燈片上繪制任何內(nèi)容。

超鏈接

POI庫具有一個名為 XSLFHyperlink 的類,您可以使用它在演示文稿中創(chuàng)建一個超鏈接。 下面提到這個類的一些重要方法。

:XSLFHyperlink

套件:org.apache.poi.xslf.usermodel

S.No方法和描述
1

java.net.URI getTargetURL()

返回演示文稿幻燈片中存在的網(wǎng)址。

2

void setAddress(java.lang.String address)

此方法用于將地址設(shè)置為URL。

3

void setAddress(XSLFSlide幻燈片)

將地址設(shè)置為演示文稿幻燈片中顯示的網(wǎng)址。

Apache POI PPT - 演示

一般來說,我們使用MS-PowerPoint來創(chuàng)建演示文稿。 現(xiàn)在讓我們看看如何使用Java創(chuàng)建演示文稿。 完成本章后,您將能夠創(chuàng)建新的MS-PowerPoint演示文稿,并使用您的Java程序打開現(xiàn)有的PPT。

創(chuàng)建空的演示文稿

要創(chuàng)建空的演示文稿,您必須實例化 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);

以下是創(chuàng)建空白MS-PowerPoint演示文稿的完整程序。

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

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

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 ,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac  CreatePresentation.java
$java CreatePresentation

如果您的系統(tǒng)環(huán)境配置有POI庫,它將編譯并執(zhí)行,以在當(dāng)前目錄中生成名為 example1.pptx 的空白PPT文件,并在命令提示符下顯示以下輸出:

Presentation created successfully

空白PowerPoint文檔顯示如下:

編輯現(xiàn)有演示文稿

要打開現(xiàn)有的演示文稿,請實例化 XMLSlideShow 類,并將要編輯的文件的 FileInputStream 對象作為 XMLSlideShow 構(gòu)造函數(shù)的參數(shù)傳遞 。

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();

下面給出了打開和添加幻燈片到現(xiàn)有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 slodeshow
      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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  EditPresentation.java
$java EditPresentation

它將編譯并執(zhí)行以生成以下輸出:

slides successfully added

帶有新添加的幻燈片的輸出PPT文檔如下所示:

將幻燈片添加到PPT后,您可以在幻燈片上添加,執(zhí)行,讀取和寫入操作。

Apache POI PPT - 幻燈片布局

在上一章中,您已經(jīng)了解了如何創(chuàng)建空白幻燈片以及如何向其添加幻燈片。 在本章中,您將學(xué)習(xí)如何獲取可用幻燈片的列表,以及如何創(chuàng)建具有不同布局的幻燈片。

可用的幻燈片布局

PowerPoint演示文稿具有幻燈片布局,您可以選擇所需的布局來編輯幻燈片。 首先,讓我們找出所有可用的幻燈片布局的列表。

  • 有不同的幻燈片母版,在每個幻燈片母版中,有幾個幻燈片布局。

  • 您可以使用 XMLSlideShow 類的 getSlideMasters()方法獲取幻燈片主題列表。

  • 您可以使用 XSLFSlideMaster 類的 getSlideLayouts()方法從每個幻燈片母帶獲取幻燈片布局的列表。

  • 您可以使用 XSLFSlideLayout 類的 getType()方法從布局對象獲取幻燈片布局的名稱。

注意:所有這些類都屬于 org.poi.xslf.usermodel 包。

下面給出的是獲取PPT中可用幻燈片布局列表的完整程序:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  SlideLayouts.java
$java SlideLayouts

它將編譯并執(zhí)行以生成以下輸出:

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版本提供的一些示例幻燈片布局。

標(biāo)題布局

讓我們使用標(biāo)題布局在PPT中創(chuàng)建幻燈片。 請按照以下步驟操作:

步驟1 :通過實例化 XMLSlideShow 類創(chuàng)建一個空的演示文稿,如下所示:

XMLSlideShow ppt = new XMLSlideShow();

步驟2 :使用 getSlideMasters()方法獲取幻燈片主題列表。 此后,使用索引選擇所需的幻燈片母帶,如下所示:

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

這里我們得到的默認(rèn)幻燈片母版是在幻燈片主數(shù)據(jù)的第0位置。

步驟3 :使用 XSLFSlideMaster 類的 getLayout()方法獲取所需的布局。 此方法接受一個參數(shù),您必須傳遞 SlideLayoutclass 的靜態(tài)變量之一,代表我們所需的布局。 這個類中有幾個變量,每個變量代表一個幻燈片布局。

下面的代碼片段顯示了如何創(chuàng)建標(biāo)題布局:

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

步驟4 :通過將幻燈片布局對象作為參數(shù)傳遞來創(chuàng)建新幻燈片。

XSLFSlide slide = ppt.createSlide(titleLayout);

第5步:使用 XSLFSlide 類的 getPlaceholder()方法選擇占位符。 此方法接受整數(shù)參數(shù)。 通過傳遞0到它,你會得到 XSLFTextShape 對象,使用它可以訪問幻燈片的標(biāo)題文本區(qū)域。 使用setText()方法設(shè)置標(biāo)題,如下所示:

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

下面給出的是在演示文稿中創(chuàng)建帶有標(biāo)題布局的幻燈片的完整程序:

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()[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("C://POIPPT//Examples//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,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac  TitleLayout.java
$java TitleLayout

它將編譯并執(zhí)行以生成以下輸出。

slide created successfully

帶有新添加的標(biāo)題布局幻燈片的PPT文檔如下所示:

標(biāo)題和內(nèi)容布局

讓我們使用標(biāo)題和內(nèi)容布局在PPT中創(chuàng)建幻燈片。 按照下面給出的步驟。

步驟1 :通過實例化 XMLSlideShow 類創(chuàng)建一個空的演示文稿,如下所示:

XMLSlideShow ppt = new XMLSlideShow();

步驟2 :使用 getSlideMasters()方法獲取幻燈片主題列表。 使用索引選擇所需的幻燈片母帶,如下所示:

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

這里我們得到的默認(rèn)幻燈片母版是在幻燈片主數(shù)據(jù)的第0位置。

步驟3 :使用 XSLFSlideMaster 類的 getLayout()方法獲取所需的布局。 此方法接受一個參數(shù),您必須傳遞代表我們所需布局的 SlideLayout 類的靜態(tài)變量之一。 這個類中有幾個變量代表幻燈片布局。

以下代碼段顯示如何創(chuàng)建標(biāo)題和內(nèi)容布局:

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

步驟4 :通過將幻燈片布局對象作為參數(shù)傳遞來創(chuàng)建新幻燈片。

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

第5步:使用 XSLFSlide 類的 getPlaceholder()方法選擇占位符。 此方法接受整數(shù)參數(shù)。 通過傳遞1給它,你會得到 XSLFTextShape 對象,使用它可以訪問幻燈片的內(nèi)容區(qū)域。 使用setText()方法設(shè)置標(biāo)題,如下所示:

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

步驟6 :使用 XSLFTextShape 類別的 clearText()方法清除投影片中現(xiàn)有的文字。

body.clearText();

步驟7 :使用 addNewTextParagraph()方法添加新段落。 現(xiàn)在使用 addNewTextRun()方法向段落中添加一個新的文本運(yùn)行。 現(xiàn)在到文本運(yùn)行,使用 setText()方法添加文本,如下所示:

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

下面給出的是在演示文稿中創(chuàng)建帶有標(biāo)題布局的幻燈片的完整程序:

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()[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 ,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac  TitleLayout.java
$java TitleLayout

它將編譯并執(zhí)行以生成以下輸出:

slide created successfully

帶有新添加的標(biāo)題布局幻燈片的PPT文檔如下所示:

以同樣的方式,您也可以創(chuàng)建具有不同布局的幻燈片。

Apache POI PPT - 幻燈片管理

完成本章后,您將能夠在幻燈片上刪除,重新排序和執(zhí)行讀取和寫入操作。

更改幻燈片

我們可以使用 XMLSlideShow 類的 setPageSize()方法更改幻燈片的頁面大小。

最初創(chuàng)建演示文稿如下所示:

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

使用 XMLSlideShow 類的 getPageSize()方法獲取當(dāng)前幻燈片的大小。

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

使用 setPageSize()方法設(shè)置頁面的大小。

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 ,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac ChangingSlide.java
$java ChangingSlide

它將編譯并執(zhí)行以生成以下輸出。

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

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

更改其大小后,幻燈片顯示如下:

重新排序幻燈片

您可以使用 setSlideOrder()方法設(shè)置幻燈片順序。 下面給出了設(shè)置幻燈片順序的過程。

打開現(xiàn)有PPT文檔,如下所示:

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

使用 getSlides()方法獲取幻燈片,如下所示:

XSLFSlide[] slides =ppt.getSlides();

從幻燈片數(shù)組中選擇一張幻燈片,然后使用 setSlideOrder()方法更改順序,如下所示:

//selecting the fourth slide
XSLFSlide selectesdslide= slides[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 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 
      XSLFSlide[] slides = ppt.getSlides();    
      
      //selecting the fourth slide
      XSLFSlide selectesdslide = slides[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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  ReorderSlide.java
$java ReorderSlide

它將編譯并執(zhí)行以生成以下輸出。

Reordering of the slides is done

下面是重新排序幻燈片之前的演示的快照:

重新排序幻燈片后,演示文稿如下所示。 在這里,我們選擇了幻燈片與圖像,并將其移動到頂部。

正在刪除幻燈片

您可以使用 removeSlide()方法刪除幻燈片。 按照以下步驟刪除幻燈片。

使用 XMLSlideShow 類打開現(xiàn)有演示文稿,如下所示:

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

使用 removeSlide()方法刪除所需的幻燈片。 此方法接受整數(shù)參數(shù)。 將要刪除的幻燈片的索引傳遞給此方法。

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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  Deleteslide.java
$java Deleteslide

它將編譯并執(zhí)行以生成以下輸出:

reordering of the slides is done

下面的快照是刪除幻燈片之前的演示文稿:

刪除幻燈片后,演示顯示如下:

Apache POI PPT - 圖像

在本章中,您將學(xué)習(xí)如何將圖像添加到PPT以及如何從中讀取圖像。

添加圖像

您可以使用 XSLFSlide createPicture()方法將圖片添加到演示文稿。 此方法接受以字節(jié)數(shù)組格式形式的圖像。 因此,您必須創(chuàng)建要添加到演示文稿的圖像的字節(jié)數(shù)組。

按照給定的過程向演示文稿添加圖像。 使用 XMLSlideShow 創(chuàng)建空白幻燈片,如下所示:

XMLSlideShow ppt = new XMLSlideShow();

使用 createSlide()創(chuàng)建一個空的演示文稿。

XSLFSlide slide = ppt.createSlide();

使用 IOUtils 類的 IOUtils.toByteArray()讀取要添加的圖像文件并將其轉(zhuǎn)換為字節(jié)數(shù)組,如下所示:

//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()將圖片添加到演示文稿。 此方法接受兩個變量:要添加的圖像的字節(jié)數(shù)組格式和表示圖像的文件格式的靜態(tài)變量。 addPicture()方法的用法如下所示:

int 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.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
      int idx = ppt.addPicture(picture, XSLFPictureData.PICTURE_TYPE_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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  AddingImage.java
$java AddingImage

它將編譯并執(zhí)行以生成以下輸出:

reordering of the slides is done

帶有新添加的帶有圖像的幻燈片的演示文稿如下所示:

閱讀圖像

您可以使用 XMLSlideShow 類的 getAllPictures()方法獲取所有圖片的數(shù)據(jù)。 以下程序從演示文稿讀取圖像:

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.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.getAllPictures()){
         
         byte[] bytes = data.getData();
         String fileName = data.getFileName();
         int pictureFormat = data.getPictureType();
         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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  Readingimage.java
$java Readingimage

它將編譯并執(zhí)行以生成以下輸出:

picture name: image1.png
picture format: 6 

Apache POI PPT - 創(chuàng)建超鏈接

在本章中,您將學(xué)習(xí)如何在演示文稿中創(chuàng)建超鏈接。

創(chuàng)建超鏈接

您可以使用 XSLFTextRun 類的 createHyperlink()方法讀取演示文稿中的超鏈接。 按照下面給出的過程在演示中創(chuàng)建超鏈接。

使用 XMLSlideShow 類創(chuàng)建一個空的演示文稿,如下所示:

XMLSlideShow ppt = new XMLSlideShow();

創(chuàng)建一個空白幻燈片,并使用正文和內(nèi)容布局創(chuàng)建幻燈片的文本框和正文。

//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();

創(chuàng)建一個文本運(yùn)行對象并設(shè)置文本到它,如下所示:

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

使用 XSLFTextRun 類的 createHyperlink()方法創(chuàng)建超鏈接,如下所示:

XSLFHyperlink link = textRun.createHyperlink();

使用 XSLFHyperlink 類的 setAddress()方法將鏈接地址設(shè)置為超鏈接,如下所示:

link.setAddress("//o2fo.com/");

下面給出了在演示文稿中創(chuàng)建超鏈接的完整程序:

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()[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("//o2fo.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 cretated successfully");
      out.close();              
   }
}

將上述Java代碼保存為 CreatingHyperlinks.java ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  CreatingHyperlinks.java
$java CreatingHyperlinks

它將編譯并執(zhí)行以生成以下輸出:

slide cretated successfully 

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

Apache POI PPT - 閱讀形狀

從介紹的讀書形狀

您可以使用 XSLFShape 類的方法 getShapeName()來計算演示文稿中使用的形狀數(shù)量。 下面給出的是從演示中讀取形狀的程序:

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.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 
      XSLFSlide[] slide = ppt.getSlides();
      
      //getting the shapes in the presentation
      System.out.println("Shapes in the presentation:");
      for (int i = 0; i < slide.length; i++){
         
         XSLFShape[] sh = slide[i].getShapes();
         for (int j = 0; j < sh.length; j++){
            
            //name of the shape
            System.out.println(sh[j].getShapeName());
         }
      }
      FileOutputStream out = new FileOutputStream(file);
      ppt.write(out);
      out.close();	
   }
}

將上述Java代碼另存為 ReadingShapes.java ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  ReadingShapes.java
$java ReadingShapes

它將編譯并執(zhí)行以生成以下輸出。

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

新添加的具有各種形狀的幻燈片顯示如下:

Apache POI PPT - 格式化文本

格式化演示文稿中的文本

可以使用 XSLFTextRun 類的方法來格式化演示文稿中的文本。 為此,您必須通過選擇一個幻燈片布局來創(chuàng)建一個 XSLFTextRun 類對象,如下所示:

//create the empty presentation 
XMLSlideShow ppt = new XMLSlideShow();
//getting the slide master object
XSLFSlideMaster slideMaster = ppt.getSlideMasters()[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()設(shè)置演示文稿中文本的字體大小。

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

以下代碼段顯示了如何對演示文稿中的文字應(yīng)用不同的格式樣式(粗體,斜體,下劃線,刪除線)。

//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.setUnderline(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()[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 line1
      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);      
      //moving to the next line
      paragraph.addLineBreak();
     
      //formatting line2
      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 line3
      XSLFTextRun run3 = paragraph.addNewTextRun();
      run3.setText(" This is a striked line");
      run3.setFontSize(12);
      //making the text italic
      run3.setItalic(true);
      //strike through the text
      run3.setStrikethrough(true);
      paragraph.addLineBreak();
      
      //formatting line4
      XSLFTextRun run4 = paragraph.addNewTextRun();
      run4.setText(" This an underlined line");
      run4.setUnderline(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 ,然后從命令提示符處編譯并執(zhí)行,如下所示:

$javac  TextFormating.java
$java TextFormating

它將編譯并執(zhí)行以生成以下輸出:

Formatting completed successfully 

帶有格式化文本的幻燈片如下所示:

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{
      
      //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 ,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac  MergingMultiplePresentations.java
$java MergingMultiplePresentations

它將編譯并執(zhí)行以生成以下輸出:

Merging done successfully

以下快照顯示第一個演示:

以下快照顯示第二個演示:

下面給出合并兩個幻燈片后程序的輸出。 在這里您可以看到合并在一起的早期幻燈片的內(nèi)容。

Apache POI PPT - PPT到映像

將演示文稿轉(zhuǎn)換為圖像

您可以將演示文稿轉(zhuǎn)換為圖像文件。 以下程序顯示了如何去做。

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 PpttoPNG {
   
   public static void main(String args[]) throws IOException{
      
      //creating an empty presentation
      File file=new File("addingimage.pptx");
      XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(file));
      
      //getting the dimensions and size of the slide 
      Dimension pgsize = ppt.getPageSize();
      XSLFSlide[] slide = ppt.getSlides();
      for (int i = 0; i < slide.length; i++) {
      BufferedImage 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[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 ,然后從命令提示符處編譯并執(zhí)行它,如下所示:

$javac  PpttoPNG.java
$java PpttoPNG

它將編譯并執(zhí)行以生成以下輸出:

Image created successfully

以下快照顯示了作為輸入的演示:

下面給出了在指定位置創(chuàng)建的映像的快照。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號