使用POI操作PPT文檔

1)如果是創建新的PPT文檔,直接使用SlideShow和Slide類就可以,其中SlideShow表示PPT文檔,Slide表示某一張幻燈片
如下代碼創建空的PPT文檔:

SlideShow ppt = new SlideShow();
Slide[] slides = ppt.getSlides();
assertTrue(slides.length == 0);
savePPTFile(ppt);
 
private void savePPTFile(SlideShow ppt) throws Exception{
FileOutputStream out = new FileOutputStream(\"ppt測試.ppt\");
ppt.write(out);
out.close();
}

2)設置母版,這樣後續的新建幻燈片都將使用母版的字體,背景等設置

SlideShow ppt = new SlideShow();
//設置幻燈片大小
ppt.setPageSize(new Dimension(760,600));
SlideMaster master = ppt.getSlidesMasters()[0];
//設置母板背景,支持多種圖片格式
int picIndex = ppt.addPicture(new File(\"background.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);

3)創建幻燈片並插入文本

SlideShow ppt = new SlideShow();
Slide newSlide = ppt.createSlide();
 
//添加幻燈片標題
TextBox title = newSlide.addTitle();
RichTextRun titleRun = title.getTextRun().getRichTextRuns()[0];
titleRun.setFontColor(Color.RED);
title.setText(\"ppt測試\");
 
//添加文本框
TextBox txt = new TextBox();
RichTextRun richTextRun = txt.getTextRun().getRichTextRuns()[0];
richTextRun.setFontColor(Color.BLUE);
//setText參數字符串可以包含回車、換行符,但是最後一行不能以\\r\\n結尾,否則設置的格式沒有效果(v3.5)
richTextRun.setText(\"這裏可以換行\\r\\n第二行文本\");
txt.setAnchor(new java.awt.Rectangle(50,150,400,400));
newSlide.addShape(txt);
 
savePPTFile(ppt);

4)插入圖片,支持多種格式

SlideShow ppt = new SlideShow();
Slide newSlide = ppt.createSlide();
int picIndex = ppt.addPicture(new File(\"圖片.jpg\"), Picture.JPEG);
Picture jpg = new Picture(picIndex);
 
//set image position in the slide
jpg.setAnchor(new java.awt.Rectangle(360, 200, 280, 260));
 
newSlide.addShape(jpg);
savePPTFile(ppt);

5)插入表格(v3.5)

SlideShow ppt = new SlideShow();
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);
savePPTFile(ppt);

6)如果是讀取已存在的PPT文檔則還要用到HSLFSlideShow,下面代碼將PPT文件導出爲圖片(png)格式,如果幻燈片上有中文字符則這些字符的字體需要修改爲支持中文的字體(宋體等),否則導出的圖片的中文字符不能正常顯示

SlideShow ppt = new SlideShow(new HSLFSlideShow(\"PPT測試.ppt\"));
Dimension pgsize = ppt.getPageSize();
Slide[] 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);
 
FileOutputStream out = new FileOutputStream(\"slide-\" + (i+1) + \".png\");
javax.imageio.ImageIO.write(img, \"png\", out);
out.close();
}

7)提取PPT文檔信息

SlideShow ppt = new SlideShow(new HSLFSlideShow(\"PPT測試.ppt\"));
Slide[] slides = ppt.getSlides();
//提取文本信息
for (Slide each : slides) {
System.out.println(each.getTitle()) ;
TextRun[] textRuns = each.getTextRuns();
for (int i=0 ;i< textRuns.length; i++ ) {
System.out.println(textRuns[i].getText());
RichTextRun[] richTextRuns = textRuns[i].getRichTextRuns();
for (int j = 0; j < richTextRuns.length; j++) {
System.out.println(richTextRuns[j].getText());
}
}
}
//提取所有JPEG圖片
PictureData[] picDatas = ppt.getPictureData();
for (int i=0;i<picDatas.length;i++) {
if(picDatas[i].getType() == Picture.JPEG){
FileOutputStream out = new FileOutputStream(\"jpg_\" + i + \".jpg\");
ppt.write(out);
out.close();
}
}

8)設置PPT文檔摘要信息(文檔點擊鼠標右鍵查看屬性)

HSLFSlideShow hslf = HSLFSlideShow.create();
DocumentSummaryInformation dsi= hslf.getDocumentSummaryInformation();
SummaryInformation si= hslf.getSummaryInformation();
 
dsi.setCompany(\"yourCompany\");
dsi.setCategory(\"ppt測試\");
si.setAuthor(\"yourName\");
si.setTitle(\"標題\");
 
SlideShow ppt = new SlideShow(hslf);
savePPTFile(ppt);
發佈了66 篇原創文章 · 獲贊 9 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章