import java.awt.Color;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.HeadersFooters;
import org.apache.poi.hslf.model.Line;
import org.apache.poi.hslf.model.Picture;
import org.apache.poi.hslf.model.Slide;
import org.apache.poi.hslf.model.SlideMaster;
import org.apache.poi.hslf.model.Table;
import org.apache.poi.hslf.model.TableCell;
import org.apache.poi.hslf.model.TextBox;
import org.apache.poi.hslf.usermodel.RichTextRun;
import org.apache.poi.hslf.usermodel.SlideShow;
public class pptUtil {
//操作ppt公用类
/**
* 创建ppt
* @param ppt ppt对象
* @param filename 要保存的ppt文件名
*/
public void savaPptFile(SlideShow ppt,String filename){
FileOutputStream out;
try {
out = new FileOutputStream(filename);
ppt.write(out);
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 设置幻灯片的一些样式
* @param ppt 对象
*/
public static void createPPtStyle(SlideShow ppt){
ppt.setPageSize(new Dimension(1000,800));
SlideMaster master = ppt.getSlidesMasters()[0];
//设置母板背景,支持多种图片格式
int picIndex;
try {
picIndex = ppt.addPicture(new File("d:\\POI\\1.png"), Picture.PNG);
Picture background = new Picture(picIndex);
//设置图片位置
background.setAnchor(new java.awt.Rectangle(0, 0, ppt.getPageSize().width
, ppt.getPageSize().height));
master.addShape(background);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 插入表格
* @param ppt
*/
public static void createTableForPPt(SlideShow ppt){
Slide slide = ppt.createSlide();
String[][] datas = {
{"序号", "姓名","年龄"},
{"1", "张三","30"},
{"2", "李四","27"},
};
//create a table of 3 rows and 3 columns
Table table = new Table(3, 3);
for (int i = 0; i < datas.length; i++) {
for (int j = 0; j < datas[i].length; j++) {
TableCell cell = table.getCell(i, j);
RichTextRun rt = cell.getTextRun().getRichTextRuns()[0];
rt.setFontName("宋体");
rt.setFontSize(12);
cell.setVerticalAlignment(TextBox.AnchorMiddle);
cell.setHorizontalAlignment(TextBox.AlignCenter);
cell.setText(datas[i][j]);
if(i == 0){//首行背景设置为灰色
cell.setFillColor(Color.GRAY);
}
}
}
Line border = table.createBorder();
border.setLineColor(Color.black);
border.setLineWidth(2.0);
table.setAllBorders(border);
slide.addShape(table);
table.moveTo(160,260);
}
/**
*
* @param ppt 对象
* @param newSlide 当前页
* @param PictureName 当前页插入的图片地址
*/
public static void createPic(SlideShow ppt,Slide newSlide,String PictureName){
try {
int picIndex = ppt.addPicture(new File(PictureName), Picture.PNG);
Picture jpg = new Picture(picIndex);
//set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(0, 0, 280, 260));
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param ppt
* @param newSlide
* @param gifFileName
*/
public static void createGIFforPPt(SlideShow ppt,Slide newSlide,String gifFileName){
int picIndex;
try {
picIndex = ppt.addPicture(new File(gifFileName), Picture.PNG);
Picture jpg = new Picture(picIndex);
//set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(140, 100, 385, 300));
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*
* @param ppt 对象
* @param newSlide 当前页
* @param PictureName 当前页插入的多张图片地址
* 单图 两图 四图 六图 九图 1-9张图
*/
public static void createMorePic(SlideShow ppt,Slide newSlide,ArrayList<String> PictureList){
if(PictureList.size()==1){
//插入单图
int picIndex;
try {
picIndex = ppt.addPicture(new File(PictureList.get(0)), Picture.PNG);
Picture jpg = new Picture(picIndex);
//set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(0, 50, ppt.getPageSize().width, ppt.getPageSize().height*4/5));
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(PictureList.size()==2){
//插入双图
for(int i=0;i<PictureList.size();i++){
int picIndex;
try {
picIndex = ppt.addPicture(new File(PictureList.get(i)), Picture.PNG);
Picture jpg = new Picture(picIndex);
//set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(0+i*ppt.getPageSize().width/3, 0+i*ppt.getPageSize().height/3, ppt.getPageSize().width*2/3, ppt.getPageSize().height*2/3));
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else if(PictureList.size()==3||PictureList.size()==4){
//插入 三图或四图 放两排
for(int i=0;i<PictureList.size();i++){
int picIndex;
try {
picIndex = ppt.addPicture(new File(PictureList.get(i)), Picture.PNG);
Picture jpg = new Picture(picIndex);
//设置图片在幻灯片中的位置
if(i==0 || i==1){
jpg.setAnchor(new java.awt.Rectangle(0+i*ppt.getPageSize().width/2, 0, ppt.getPageSize().width/2, ppt.getPageSize().height/2));
}else if(i==2 || i==3){//换第二行插入
jpg.setAnchor(new java.awt.Rectangle((i-2)*ppt.getPageSize().width/2, ppt.getPageSize().height/2, ppt.getPageSize().width/2, ppt.getPageSize().height/2));
}
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else if(PictureList.size()==5 || PictureList.size()==6){
//插入五图或 六图 放置位置为两行三列
for(int i=0;i<PictureList.size();i++){
int picIndex;
try {
picIndex = ppt.addPicture(new File(PictureList.get(i)), Picture.PNG);
Picture jpg = new Picture(picIndex);
//设置图片在幻灯片中的位置
if(i==0||i==1||i==2){
jpg.setAnchor(new java.awt.Rectangle(0+i*ppt.getPageSize().width/3, 0, ppt.getPageSize().width/3, ppt.getPageSize().height/3));
}else if(i==3||i==4||i==5){//换第二行插入
jpg.setAnchor(new java.awt.Rectangle(0+(i-3)*ppt.getPageSize().width/3, ppt.getPageSize().height/3, ppt.getPageSize().width/3, ppt.getPageSize().height/3));
}
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else if(PictureList.size()==7||PictureList.size()==8||PictureList.size()==9){
//插入7图或8图、 9图 放置位置为三行三列
for(int i=0;i<PictureList.size();i++){
int picIndex;
try {
picIndex = ppt.addPicture(new File(PictureList.get(i)), Picture.PNG);
Picture jpg = new Picture(picIndex);
//设置图片在幻灯片中的位置
if(i==0||i==1||i==2){
jpg.setAnchor(new java.awt.Rectangle(0+i*ppt.getPageSize().width/3, 0, ppt.getPageSize().width/3, ppt.getPageSize().height/3));
}else if(i==3||i==4||i==5){//换第二行插入
jpg.setAnchor(new java.awt.Rectangle(0+(i-3)*ppt.getPageSize().width/3, ppt.getPageSize().height/3, ppt.getPageSize().width/3, ppt.getPageSize().height/3));
}else if(i==6||i==7||i==8){
jpg.setAnchor(new java.awt.Rectangle(0+(i-6)*ppt.getPageSize().width/3, 2*ppt.getPageSize().height/3, ppt.getPageSize().width/3, ppt.getPageSize().height/3));
}
newSlide.addShape(jpg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 把多张jpg图片合成一张
* @param pic String[] 多个jpg文件名 包含路径
* @param newPic String 生成的gif文件名 包含路径
*/
public static synchronized void MorepngToGif(ArrayList<String> pic, String newPic) {
try {
AnimatedGifEncoder e = new AnimatedGifEncoder(); //请见<a href="http://http://blog.csdn.net/ycb1689/article/details/8071733">本博客文章
e.setRepeat(0);
e.start(newPic);
BufferedImage src[] = new BufferedImage[pic.size()];
for (int i = 0; i < src.length; i++) {
e.setDelay(500); //设置播放的延迟时间
src[i] = ImageIO.read(new File(pic.get(i))); // 读入需要播放的jpg文件
e.addFrame(src[i]); //添加到帧中
}
e.finish();
} catch (Exception e) {
System.out.println( "jpgToGif Failed:");
e.printStackTrace();
}
}
public static void main (String a[]){
pptUtil obj = new pptUtil();
//SlideShow _slide = new SlideShow();
SlideShow _slide = null;
try {
_slide = new SlideShow(new HSLFSlideShow("f://pptmoban.ppt"));
// 添加第一页
Slide slide0 = _slide.createSlide();
// 设置第一页的文本标题
TextBox title = slide0.addTitle();
title.setText("2014-10-15 日会商");
// 线形状
/* Line line = new Line();
line.setAnchor(new java.awt.Rectangle(50, 50, 100, 20));
line.setLineColor(new Color(0, 128, 0));
line.setLineStyle(Line.LINE_DOUBLE);
slide0.addShape(line);*/
// TextBox
TextBox txt = new TextBox();
txt.setText("深圳气象局");
txt.setAnchor(new java.awt.Rectangle(200, 300, 300, 200));
// 使用 RichTextRun 设置文本格式
RichTextRun rt = txt.getTextRun().getRichTextRuns()[0];
rt.setFontSize(32);
rt.setFontName("Arial");
rt.setBold(true);
rt.setItalic(true);
rt.setUnderlined(true);
rt.setFontColor(Color.red);
rt.setAlignment(TextBox.AlignRight);
slide0.addShape(txt);
//Slide slide1 = _slide.createSlide(); //创建第2页ppt
Slide slide2 = _slide.createSlide(); //创建第3页ppt
/*Slide slide3 = _slide.createSlide(); //创建第4页ppt
Slide slide4 = _slide.createSlide(); //创建第5页ppt
Slide slide5 = _slide.createSlide(); //创建第6页ppt
Slide slide6 = _slide.createSlide(); //创建第7页ppt
Slide slide7 = _slide.createSlide(); //创建第8页ppt
Slide slide8 = _slide.createSlide(); //创建第9页ppt
Slide slide9 = _slide.createSlide(); //创建第10页ppt
*/ //createPic(_slide, slide1, "d:\\POI\\Sunset.jpg");//在这一页ppt里面插入图片
//createPPtStyle(_slide);//给ppt设置样式
//createTableForPPt(_slide);//给ppt添加一页并插入表格
String[] PictureList1 = {"Y:/data/nwpdata/webcache/ecmwf/20141117/ECMWFNEWFore_20141117200000_000_200Temp_25km_hn_ecwmf.png"};
String[] PictureList2 = {"d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList3 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList4 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList5 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList6 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList7 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList8 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
String[] PictureList9 = {"d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png","d:\\POI\\1.png"};
ArrayList<String> list = new ArrayList<String>();
list.add("d:\\POI\\1.png");
//list.add("d:\\POI\\1.png");
//list.add("Y:/data/nwpdata/webcache/ecmwf/20141117/ECMWFNEWFore_20141117200000_000_200Temp_25km_hn_ecwmf.png");
//createMorePic(_slide, slide1, list); //给ppt的第2张幻灯片 添加一张图片
createMorePic(_slide, slide2, list); //给ppt的第3张幻灯片 添加一张图片
// createMorePic(_slide, slide3, PictureList3);
// createMorePic(_slide, slide4, PictureList4);
// createMorePic(_slide, slide5, PictureList5);
// createMorePic(_slide, slide6, PictureList6);
// createMorePic(_slide, slide7, PictureList7);
// createMorePic(_slide, slide8, PictureList8);
// createMorePic(_slide, slide9, PictureList9);
// 设置标题,底部信息
HeadersFooters hdd = _slide.getSlideHeadersFooters();
hdd.setSlideNumberVisible(true);
hdd.setFootersText("深圳竹子林");//页眉 / 页脚
obj.savaPptFile(_slide, "D:\\POI\\ppt测试2.ppt");//生成ppt
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解析PPY里面的图片数据
package com.yls.poi;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.hslf.model.Picture;
import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.usermodel.SlideShow;
public class ParsingPPT {
//解析ppt 將裡面的图片可以解析出来
public static void main(String[] args) {
String path = "d:\\POI\\";
// 加载PPT 19.
HSLFSlideShow _hslf = null;
try {
_hslf = new HSLFSlideShow("d:\\POI\\slideshow.ppt");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SlideShow _slideShow = new SlideShow(_hslf);
// 获取PPT文件中的图片数据 23.
PictureData[] _pictures = _slideShow.getPictureData();
// 循环读取图片数据 26.
for (int i = 0; i < _pictures.length; i++) {
StringBuilder fileName = new StringBuilder(path);
PictureData pic_data = _pictures[i];
fileName.append(i);
// 设置格式 31.
switch (pic_data.getType()) {
case Picture.JPEG:
fileName.append(".jpg");
break;
case Picture.PNG:
fileName.append(".png");
break;
default:
fileName.append(".data");
}
// 输出文件 42.
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream(new File(fileName.toString()));
fileOut.write(pic_data.getData());
fileOut.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}