PPT转图片(更新)

    xiaoxiao2023-12-15  166

    update:2008-05-05,POI已经可以处理这个需求: package  net.rubyeye.test; import  java.io.FileOutputStream; 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  PPTToImageConverter {      public   static   void  main(String[] args)  throws  Exception {         SlideShow ppt  =   new  SlideShow( new  HSLFSlideShow( " D:/test.ppt " ));          //  extract all pictures contained in the presentation         PictureData[] pdata  =  ppt.getPictureData();          for  ( int  i  =   0 ; i  <  pdata.length; i ++ ) {             PictureData pict  =  pdata[i];              //  picture data              byte [] data  =  pict.getData();              int  type  =  pict.getType();             String ext;              switch  (type) {              case  Picture.JPEG:                 ext  =   " .jpg " ;                  break ;              case  Picture.PNG:                 ext  =   " .png " ;                  break ;              case  Picture.WMF:                 ext  =   " .wmf " ;                  break ;              case  Picture.EMF:                 ext  =   " .emf " ;                  break ;              case  Picture.PICT:                 ext  =   " .pict " ;                  break ;              default :                  continue ;             }             FileOutputStream out  =   new  FileOutputStream( " D:/test/pict_ "   +  i  +  ext);             out.write(data);             out.close();         }     } }    原文:    小结下最近做的东西吧。因为是做一个素材管理的东西,因此需要处理各种各样的素材,音频、视频、图片、pdf、ppt等等。遇到一个需求就是将PPT转成图片组,google一下,在java里是可以jcom之类的开源库实现,本质上都是通过jni调用office的COM接口来实现。我们就需要这么一个小功能,拖这么大个开源库进来实在没有必要。最后决定自己写个动态链接库,通过jni来调用。     先写工具类, public   class  PPTUtils {      public  PPTUtils() {     }      public   static   native   void  convertPPT2IMG(String pptFileName, String tmpDir);      public   static   void  loadLibrary() { // 加载动态库         String dllFileName  =   " pptDll " ;          try  {             String OsName  =  System.getProperty( " os.name " );              if  (OsName.contains( " Windows " )) {                 dllFileName  +=   " .dll " ;             }  else  {                 dllFileName  +=   " .so " ;             }              // 加载动态链接库             System.load( dllFileName);                   }          catch  (Exception e) {           //    LOG.error("can not load " + dllFileName + ", " + e.getMessage());             e.printStackTrace();         }      } }     编译一下,执行javah PPTUtils生成头文件PPTUtils.h。接下来用vc写个动态链接库,记的将MSPPT.OLB(在office安装目录下)加入工程,新建一个ppt2img.cpp: #include  " stdafx.h " #include  " PPTUtils.h " #include  " msppt.h " JNIEXPORT  void  JNICALL Java_com_starnet_dmb_util_PPTUtils_convertPPT2IMG(JNIEnv  * env,       jclass clazz, jstring pptFileName, jstring tmpDir){     // 初始化com      if  (CoInitialize( NULL )  ==  E_INVALIDARG)     {        AfxMessageBox(_T( " 初始化Com失败! " ));         return ;     }       _Application   app;     Presentations   prsts;     _Presentation   prst;      // jstring转成char *     const   char   * ppt;    ppt  =  env -> GetStringUTFChars(pptFileName, 0 );     const   char   * tmp;    tmp = env -> GetStringUTFChars(tmpDir, 0 );     if ( ! app.CreateDispatch(_T( " PowerPoint.Application " ))){       AfxMessageBox(_T( " 初始化PowerPoint失败! " ));         return ;    }    prsts    =    app.GetPresentations();    prst    =    prsts.Open(_T(ppt), false , false , false );    prst.SaveAs(_T(tmp), 17 , false );    app.ReleaseDispatch();    app.Quit();    env -> ReleaseStringUTFChars(pptFileName,ppt);    env -> ReleaseStringUTFChars(tmpDir,tmp);    CoUninitialize(); } 文章转自庄周梦蝶  ,原文发布时间2008-01-04 相关资源:图片幻灯片展示(旋转)
    最新回复(0)