使用jacob,引入jacob.jar,将jacob-1.18-x64.dll放入system32java
里面有两个关键类ActiveXComponent和Dispatch,ActiveXComponent能够理解为window中的一个程序,例如 word ppt ...,Dispatch能够表明其中的一个对象.web
关键语句apache
//启动ppt程序 ActiveXComponent ppt=null; ppt = new ActiveXComponent("PowerPoint.Application"); Dispatch pptDocument = ppt.getProperty("Presentations").toDispatch(); //打开文档 Dispatch curDocument =Dispatch.call(pptDocument, "Open", filePath).toDispatch();
getProperty获取属性,call执行方法具体代码以下ide
package cn.com.do1.utils; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.log4j.Logger; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.SafeArray; import com.jacob.com.Variant; /** * ppt 工具类 * @author ydy * */ public class PptUtil { private static Logger logger=Logger.getLogger(PptUtil.class); //临时目录 private static final String TEMP_FILE_PATH; static { String catalinaHome=System.getProperty("catalina.home"); if(StringUtils.isBlank(catalinaHome)) { TEMP_FILE_PATH=PptUtil.class.getResource("/").getPath()+File.separator+"temp"; }else {//web环境 TEMP_FILE_PATH=catalinaHome+File.separator+"temp"; } File fileTemp=new File(TEMP_FILE_PATH); if(fileTemp.exists()) { }else { fileTemp.mkdirs(); } } /** * ppt添加水印 * @param is 输入流 * @param os 输出流 * @param waterContent 水印内容 * @param officeType 文档类型 * * */ public static boolean addWater(InputStream is,OutputStream os,String waterContent,OfficeType officeType) { try { //生成文件 String filePath =TEMP_FILE_PATH+File.separator+officeType.getName(); File fileFrom=new File(filePath); OutputStream osFileFrom=FileUtils.openOutputStream(fileFrom); IOUtils.copy(is, osFileFrom); is.close(); //初始化com的线程 ComThread.InitSTA(); //ppt程序 ActiveXComponent ppt=null; ppt = new ActiveXComponent("PowerPoint.Application"); Dispatch pptDocument = ppt.getProperty("Presentations").toDispatch(); //打开文档 Dispatch curDocument =Dispatch.call(pptDocument, "Open", filePath).toDispatch(); //全部幻灯片 Dispatch slides= Dispatch.get(curDocument, "Slides").toDispatch(); //获取幻灯片数量 Variant slidesCount = Dispatch.get(slides, "Count"); //遍历幻灯片 for(int i=0;i<slidesCount.getInt();i++) { Dispatch slide= Dispatch.call(slides, "Item", new Variant(i+1)).toDispatch(); //获取幻灯片内全部元素 Dispatch shapes = Dispatch.get(slide, "Shapes").toDispatch(); //添加水印 Dispatch.call(shapes, "AddTextEffect",new Variant(0),waterContent,"宋体",new Variant(10),new Variant(0),new Variant(1),new Variant(0),new Variant(0)).toDispatch(); } //保存 Dispatch.call(curDocument, "Save"); //关闭文件 Dispatch.call(curDocument, "Close"); //关闭程序 ppt.invoke("Quit", new Variant[] {}); //释放COM ComThread.quitMainSTA(); InputStream isFileFrom=FileUtils.openInputStream(fileFrom); IOUtils.copy(isFileFrom, os); os.close(); isFileFrom.close(); return true; } catch (Exception e) { // TODO: handle exception e.printStackTrace(); logger.error(ExceptionUtils.getStackTrace(e)); } return false; } public static void openDocument(String filePath) { //初始化com的线程 ComThread.InitSTA(); ActiveXComponent ppt=null; // ActiveXComponent presentation=null; ppt = new ActiveXComponent("PowerPoint.Application"); ppt.setProperty("Visible", new Variant(true)); Dispatch pptDocument = ppt.getProperty("Presentations").toDispatch(); Dispatch curDocument =Dispatch.call(pptDocument, "Open", filePath).toDispatch(); //Slides; //全部幻灯片 Dispatch slides= Dispatch.get(curDocument, "Slides").toDispatch(); //获取幻灯片数量 Variant slidesCount = Dispatch.get(slides, "Count"); System.out.println("slidesCount:"+slidesCount); //遍历幻灯片 for(int i=0;i<slidesCount.getInt();i++) { Dispatch slide= Dispatch.call(slides, "Item", new Variant(i+1)).toDispatch(); //获取幻灯片内全部元素 Dispatch shapes = Dispatch.get(slide, "Shapes").toDispatch(); Dispatch textEffect= Dispatch.call(shapes, "AddTextEffect",new Variant(0),"测试水印","宋体",new Variant(10),new Variant(0),new Variant(1),new Variant(0),new Variant(0)).toDispatch(); // textEffect } ComThread.quitMainSTA(); } public static void main(String[] args) { openDocument("d:/a.pptx"); } }