莊周夢蝶

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

          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();
          }

          主站蜘蛛池模板: 札达县| 博白县| 独山县| 班玛县| 剑河县| 兰州市| 柯坪县| 北海市| 峡江县| 康定县| 绍兴县| 左贡县| 那坡县| 淳化县| 万全县| 新干县| 大邑县| 黄平县| 贡觉县| 合江县| 普格县| 东方市| 南昌市| 东乌珠穆沁旗| 蓝山县| 常德市| 临桂县| 云安县| 永福县| 寻乌县| 临洮县| 合江县| 荆州市| 固阳县| 利川市| 花莲县| 衡东县| 肃北| 祁门县| 新泰市| 永寿县|