莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          PPT轉圖片(更新)

          Posted on 2008-01-04 11:26 dennis 閱讀(4369) 評論(0)  編輯  收藏 所屬分類: java
          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();
          }

          主站蜘蛛池模板: 忻城县| 泗阳县| 北川| 岫岩| 衡山县| 威海市| 甘孜| 武穴市| 新晃| 汝阳县| 永德县| 巍山| 南宫市| 沂南县| 阜新市| 祁东县| 南汇区| 德兴市| 永康市| 正镶白旗| 抚顺县| 光泽县| 鞍山市| 万山特区| 塔城市| 丹棱县| 六安市| 永寿县| 炎陵县| 青浦区| 库车县| 远安县| 太仆寺旗| 内黄县| 宕昌县| 句容市| 博罗县| 江孜县| 仁布县| 龙里县| 城步|