目前PPT文件的格式有两种:(97-2003)版本的后缀为.ppt , (2007和2010)版本的后缀为.pptx.
.ppt和.pptx的区别在于:
.pptx是office 2007,2010的默认格式 .docx、.xlsx以及.pptx是基于XML的文件格式,因此多了个X.微软提到这个新的格式家族为“Microsoft Office Open XML Formats”。Open XML格式具有很多优点,可以减小文件大小,提高安全性和可靠性,还能增加文件与外部源相集成的能力。
.ppt是office 2003 的默认格式,是基于二进制的文件格式。
具体的.pptx文件格式的优势:
http://wenku.baidu.com/link?url=0xhLpnT0eaPTx1LV_8bu-6BI-B4civqQwA27La6Cdsm0YayJiPXL1OueecKGq9s8MPX6WmvpOhsw54txfsADt3RIk_WD61FSOEUdK_RJN3ya
POI API Documentation :http://poi.apache.org/apidocs/index.html
Apache Poi:http://poi.apache.org/
.pptx主要使用XSLF接口进行操作,.ppt主要使用HSLF接口进行操作。
1 package poi_ppt; 2 3 import java.awt.geom.Rectangle2D; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 7 import org.apache.poi.util.IOUtils; 8 import org.apache.poi.xslf.usermodel.XMLSlideShow; 9 import org.apache.poi.xslf.usermodel.XSLFGroupShape; 10 import org.apache.poi.xslf.usermodel.XSLFPictureData; 11 import org.apache.poi.xslf.usermodel.XSLFPictureShape; 12 import org.apache.poi.xslf.usermodel.XSLFShape; 13 import org.apache.poi.xslf.usermodel.XSLFSlide; 14 import org.apache.poi.xslf.usermodel.XSLFTextShape; 15 16 /** 17 * Apache poi 操作2007 Powerpoint 文档 18 * 获取ppt的内容并输出到console,遇到ppt中的第一张图片输出images1.class,第二张为images2.class,以此类推 19 * 并将ppt中的"{word}"字符串替换成指定字符串,将"{picture}"字符串替换成指定的图片 20 * 21 * (尚未解析出来的): 22 * org.apache.poi.xslf.usermodel.XSLFGraphiFrame 23 * org.apache.poi.xslf.usermodel.XSLFTable 24 * @author lin 2015年7月20日 25 */ 26 27 public class Replaceppt { 28 @SuppressWarnings("unused") 29 public static void main(String[] args) throws Exception { 30 //获取ppt文件 31 FileInputStream is = new FileInputStream("E:\abc.pptx"); 32 XMLSlideShow ppt = new XMLSlideShow(is); 33 is.close(); 34 // 获取幻灯片 35 for (XSLFSlide slide : ppt.getSlides()) { 36 // 获取每一张幻灯片中的shape 37 for (XSLFShape shape : slide.getShapes()) { 38 // position on the canvas 39 Rectangle2D anchor = shape.getAnchor(); 40 if (shape instanceof XSLFTextShape) { 41 XSLFTextShape txShape = (XSLFTextShape) shape; 42 System.out.println(txShape.getText()); 43 if (txShape.getText().contains("{word}")) { 44 // 替换文字内容 45 txShape.setText(txShape.getText().replace("{word}","你好,你来自哪里?")); 46 } else if (txShape.getText().contains("{picture}")) { 47 // 替换图片 48 byte[] pictureData = IOUtils.toByteArray(new FileInputStream("E:\33.png")); 49 int idx = ppt.addPicture(pictureData,XSLFPictureData.PICTURE_TYPE_PNG); 50 XSLFPictureShape pic = slide.createPicture(idx); 51 // 设置XSLFPictureShape的位置信息 52 pic.setAnchor(anchor); 53 // 移除XSLFTextShape 54 slide.removeShape(txShape); 55 } 56 } else if (shape instanceof XSLFGroupShape) { 57 for (XSLFShape sunshape : ((XSLFGroupShape) shape).getShapes()) { 58 XSLFTextShape txSunShape = (XSLFTextShape) sunshape; 59 System.out.println(txSunShape.getText()); 60 if (txSunShape.getText().contains("{word}")) { 61 // 替换文字内容 62 txSunShape.setText(txSunShape.getText().replace("{word}", "你好,你来自哪里?")); 63 } else if (txSunShape.getText().contains("{picture}")) { 64 // 替换图片 65 byte[] pictureData = IOUtils.toByteArray(new FileInputStream("E:\33.png")); 66 int idx = ppt.addPicture(pictureData,XSLFPictureData.PICTURE_TYPE_PNG); 67 XSLFPictureShape pic = slide.createPicture(idx); 68 slide.removeShape(txSunShape); 69 pic.setAnchor(anchor); 70 } 71 } 72 } else if (shape instanceof XSLFPictureShape) { 73 XSLFPictureShape pShape = (XSLFPictureShape) shape; 74 XSLFPictureData pData = pShape.getPictureData(); 75 System.out.println(pData.getFileName()); 76 } else { 77 System.out.println("Process me: " + shape.getClass()); 78 } 79 } 80 } 81 82 FileOutputStream out = new FileOutputStream("E:\abc(2).pptx"); 83 ppt.write(out); 84 out.close(); 85 } 86 87 }