目前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.XSLFGraphiFrame23 * 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 // 获取每一张幻灯片中的shape37 for (XSLFShape shape : slide.getShapes()) {38 // position on the canvas39 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 // 移除XSLFTextShape54 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 }
新闻热点
疑难解答