CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

          項目開發過程中,需求涉及到了各種文檔轉換為HTML或者網頁易顯示格式,現在將實現方式整理如下:
          一、使用Jacob轉換Word,Excel為HTML

          “JACOB一個Java-COM中間件.通過這個組件你可以在Java應用程序中調用COM組件和Win32 libraries。”

          首先下載Jacob包,JDK1.5以上需要使用Jacob1.9版本(JDK1.6尚未測試),與先前的Jacob1.7差別不大

          1、將壓縮包解壓后,Jacob.jar添加到Libraries中;

          2、將Jacob.dll放至“WINDOWS\SYSTEM32”下面。

          需要注意的是:
          【使用IDE啟動Web服務器時,系統讀取不到Jacob.dll,例如用MyEclipse啟動Tomcat,就需要將dll文件copy到MyEclipse安裝目錄的“jre\bin”下面。
          一般系統沒有加載到Jacob.dll文件時,報錯信息為:“java.lang.UnsatisfiedLinkError: no jacob in java.library.path”】

          新建類:

          Java代碼 復制代碼
          1. public class JacobUtil   
          2. {   
          3.     public static final int WORD_HTML = 8;   
          4.   
          5.     public static final int WORD_TXT = 7;   
          6.   
          7.     public static final int EXCEL_HTML = 44;   
          8.   
          9.     /**  
          10.      * WORD轉HTML  
          11.      * @param docfile WORD文件全路徑  
          12.      * @param htmlfile 轉換后HTML存放路徑  
          13.      */  
          14.     public static void wordToHtml(String docfile, String htmlfile)   
          15.     {   
          16.         ActiveXComponent app = new ActiveXComponent("Word.Application"); // 啟動word   
          17.         try  
          18.         {   
          19.             app.setProperty("Visible"new Variant(false));   
          20.             Dispatch docs = app.getProperty("Documents").toDispatch();   
          21.             Dispatch doc = Dispatch.invoke(   
          22.                     docs,   
          23.                     "Open",   
          24.                     Dispatch.Method,   
          25.                     new Object[] { docfile, new Variant(false),   
          26.                             new Variant(true) }, new int[1]).toDispatch();   
          27.             Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {   
          28.                     htmlfile, new Variant(WORD_HTML) }, new int[1]);   
          29.             Variant f = new Variant(false);   
          30.             Dispatch.call(doc, "Close", f);   
          31.         }   
          32.         catch (Exception e)   
          33.         {   
          34.             e.printStackTrace();   
          35.         }   
          36.         finally  
          37.         {   
          38.             app.invoke("Quit"new Variant[] {});   
          39.         }   
          40.     }   
          41.   
          42.     /**  
          43.      * EXCEL轉HTML  
          44.      * @param xlsfile EXCEL文件全路徑  
          45.      * @param htmlfile 轉換后HTML存放路徑  
          46.      */  
          47.     public static void excelToHtml(String xlsfile, String htmlfile)   
          48.     {   
          49.         ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 啟動word   
          50.         try  
          51.         {   
          52.             app.setProperty("Visible"new Variant(false));   
          53.             Dispatch excels = app.getProperty("Workbooks").toDispatch();   
          54.             Dispatch excel = Dispatch.invoke(   
          55.                     excels,   
          56.                     "Open",   
          57.                     Dispatch.Method,   
          58.                     new Object[] { xlsfile, new Variant(false),   
          59.                             new Variant(true) }, new int[1]).toDispatch();   
          60.             Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {   
          61.                     htmlfile, new Variant(EXCEL_HTML) }, new int[1]);   
          62.             Variant f = new Variant(false);   
          63.             Dispatch.call(excel, "Close", f);   
          64.         }   
          65.         catch (Exception e)   
          66.         {   
          67.             e.printStackTrace();   
          68.         }   
          69.         finally  
          70.         {   
          71.             app.invoke("Quit"new Variant[] {});   
          72.         }   
          73.     }   
          74.   
          75. }  

          當時我在找轉換控件時,發現網易也轉載了一偏關于Jacob使用幫助,但其中出現了比較嚴重的錯誤:String htmlfile = "C:\\AA";

          只指定到了文件夾一級,正確寫法是String htmlfile = "C:\\AA\\xxx.html";

           

          到此WORD/EXCEL轉換HTML就已經差不多了,相信大家應該很清楚了:)

           

          二、使用XPDF將PDF轉換為HTML

           

          1、下載xpdf最新版本,地址:http://www.foolabs.com/xpdf/download.html

          我下載的是xpdf-3.02pl2-win32.zip

           

          2、下載中文支持包

          我下載的是xpdf-chinese-simplified.tar.gz

           

          3、下載pdftohtml支持包

          地址:http://sourceforge.net/projects/pdftohtml/

          我下載的是:pdftohtml-0.39-win32.tar.gz

           

          4、解壓調試

          1) 先將xpdf-3.02pl2-win32.zip解壓,解壓后的內容可根據需要進行刪減,如果只需要轉換為txt格式,其他的exe文件可以刪除,只保留pdftotext.exe,以此類推;

          2) 然后將xpdf-chinese-simplified.tar.gz解壓到剛才xpdf-3.02pl2-win32.zip的解壓目錄;

          3) 將pdftohtml-0.39-win32.tar.gz解壓,pdftohtml.exe解壓到xpdf-3.02pl2-win32.zip的解壓目錄;

          4) 目錄結構:

           +---[X:\xpdf]

                     |-------各種轉換用到的exe文件

                     |

                     |-------xpdfrc

                     |

                     +------[X:\xpdf\xpdf-chinese-simplified]

                                                |

                                                |

                                                +-------很多轉換時需要用到的字符文件

           

          xpdfrc:此文件是用來聲明轉換字符集對應路徑的文件

           

          5) 修改xpdfrc文件(文件原名為sample-xpdfrc)

          修改文件內容為:

           

          Txt代碼 復制代碼
          1. #----- begin Chinese Simplified support package   
          2. cidToUnicode    Adobe-GB1       xpdf-chinese-simplified\Adobe-GB1.cidToUnicode   
          3. unicodeMap      ISO-2022-CN     xpdf-chinese-simplified\ISO-2022-CN.unicodeMap   
          4. unicodeMap      EUC-CN          xpdf-chinese-simplified\EUC-CN.unicodeMap   
          5. unicodeMap  GBK    xpdf-chinese-simplified\GBK.unicodeMap   
          6. cMapDir         Adobe-GB1       xpdf-chinese-simplified\CMap   
          7. toUnicodeDir                    xpdf-chinese-simplified\CMap   
          8. fontDir  C:\WINDOWS\Fonts   
          9. displayCIDFontTT Adobe-GB1 C:\WINDOWS\Fonts\simhei.ttf   
          10. #----- end Chinese Simplified support package  

           

          6) 創建bat文件pdftohtml.bat(放置的路徑不能包含空格)

          內容為:

           

          Txt代碼 復制代碼
          1. @echo off   
          2. set folderPath=%1  
          3. set filePath=%2  
          4. cd /d %folderPath%   
          5. pdftohtml -enc GBK %filePath%   
          6. exit  

           

          7) 創建類

           

          Java代碼 復制代碼
          1. public class ConvertPdf   
          2. {   
          3.     private static String INPUT_PATH;   
          4.     private static String PROJECT_PATH;   
          5.        
          6.     public static void convertToHtml(String file, String project)   
          7.     {   
          8.         INPUT_PATH = file;   
          9.         PROJECT_PATH = project;   
          10.         if(checkContentType()==0)   
          11.         {   
          12.             toHtml();   
          13.         }   
          14.     }   
          15.        
          16.     private static int checkContentType()   
          17.     {   
          18.         String type = INPUT_PATH.substring(INPUT_PATH.lastIndexOf(".") + 1, INPUT_PATH.length())   
          19.                 .toLowerCase();   
          20.         if (type.equals("pdf"))   
          21.             return 0;   
          22.         else  
          23.             return 9;   
          24.     }   
          25.        
          26.     private static void toHtml()   
          27.     {   
          28.         if(new File(INPUT_PATH).isFile())   
          29.         {   
          30.             try  
          31.             {   
          32.                 String cmd = "cmd /c start X:\\pdftohtml.bat \"" + PROJECT_PATH + "\" \"" + INPUT_PATH + "\"";   
          33.                 Runtime.getRuntime().exec(cmd);   
          34.             }   
          35.             catch (IOException e)   
          36.             {   
          37.                 e.printStackTrace();   
          38.             }   
          39.         }   
          40.     }   
          41.        
          42. }  

          String cmd = "....";此處代碼是調用創建的bat文件進行轉換 

           

          8) 測試轉換

           

           

          Java代碼 復制代碼
          1. public static void main(String[] args)   
          2. {   
          3.     ConvertPdf.convertToHtml("C:\\test.pdf""X:\\xpdf");   
          4. }  

           

           

          以上就是整理的內容,后續還會添加視頻轉換為FLV格式,如果需要的話:)

          說的不是很詳細,碰到問題的朋友可以自己努力解決一下:)

          posted on 2009-02-17 14:57 CONAN 閱讀(1012) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 榆林市| 义马市| 民权县| 阿勒泰市| 法库县| 永安市| 龙胜| 恩平市| 隆化县| 江孜县| 罗山县| 丰顺县| 开阳县| 红桥区| 诸城市| 思茅市| 灵石县| 通化市| 无为县| 泰州市| 建瓯市| 信丰县| 肥城市| 虹口区| 姜堰市| 成安县| 镇巴县| 崇州市| 铜陵市| 关岭| 宜州市| 建昌县| 福贡县| 肇州县| 昌都县| 涞水县| 平阴县| 林州市| 南部县| 柞水县| 苍南县|