<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Kela's Blog

                前面的路很坎坷,但畢竟是條路.也許走過(guò)這一段就會(huì)發(fā)現(xiàn),走過(guò)去就是夢(mèng)想中的地方.因此堅(jiān)持成為此刻唯一能做且必須去做的事情.
    posts - 9, comments - 27, trackbacks - 0, articles - 15

           在最近的一個(gè)項(xiàng)目中需要將一段字符類型的文本存為word,html并要將word的內(nèi)容保存在數(shù)據(jù)庫(kù)中,于是就有了如下的一個(gè)工具類,希望能對(duì)碰到這樣需求的朋友提供點(diǎn)幫助。
           匆匆忙忙的就copy上來(lái)了,沒(méi)有做一些刪減,有一些多余的東西,有興趣的朋友可以自行略去。我的注釋相對(duì)比較清楚,可以按照自己的需求進(jìn)行組合。
          在操作word的地方使用了jacob(jacob_1.9),這個(gè)工具網(wǎng)上很容易找到,將jacob.dll放置系統(tǒng)Path中,直接放在system32下也可以,jacob.jar放置在classPath中。


    代碼如下:WordBridge.java

    /**
     * WordBridge.java
     */
    package com.kela.util;

    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    import com.kela.db.PoolingDataSource;

    /**
     * 說(shuō)明: 對(duì)word的操作 <p>
     *
     * @author   kela.kf@gmail.com
     */
    public class WordBridge {
     
       Log log = LogFactory.getLog("WordBridgt");
     
       private ActiveXComponent MsWordApp = null; 
       private Dispatch document = null;
       
        /**
         * 打開(kāi)word
         * @param makeVisible, true顯示word, false不顯示word
         */
        public void openWord(boolean makeVisible) {
           if (MsWordApp == null) {
             MsWordApp = new ActiveXComponent("Word.Application");
           }
      
           Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));
        }

        /**
         * 創(chuàng)建新的文檔
         *
         */
        public void createNewDocument() {
           Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
           document = Dispatch.call(documents, "Add").toDispatch();
        }

        /**
         * 關(guān)閉文檔
         */
        public void closeDocument() {
          // 0 = wdDoNotSaveChanges
          // -1 = wdSaveChanges
          // -2 = wdPromptToSaveChanges
          Dispatch.call(document, "Close", new Variant(0));
          document = null;
        }

        /**
         * 關(guān)閉word
         *
         */
        public void closeWord() {
           Dispatch.call(MsWordApp, "Quit");
           MsWordApp = null;
           document = null;
        }
     
        /**
         * 插入文本
         * @param textToInsert 文本內(nèi)容
         */
        public void insertText(String textToInsert) {
           Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
           Dispatch.put(selection, "Text", textToInsert);
        }

        /**
         * 保存文件
         * @param filename
         */
        public void saveFileAs(String filename) {
          Dispatch.call(document, "SaveAs", filename);
        }

        /**
         * 將word轉(zhuǎn)換成html
         * @param htmlFilePath
         */
        public void wordToHtml(String htmlFilePath) {
             Dispatch.invoke(document,"SaveAs", Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, new int[1]);
         }

        /**
         * 保存word的同時(shí),保存一個(gè)html
         * @param text 需要保存的內(nèi)容
         * @param wordFilePath word的路徑
         * @param htmlFilePath html的路徑
         * @throws LTOAException
         */
        public void wordAsDbOrToHtml(String text, String wordFilePath, String htmlFilePath) throws LTOAException {
      
          try {
             openWord(false);
             createNewDocument();
             insertText(text);
             saveFileAs(wordFilePath);
             wordToHtml(htmlFilePath);
         } catch (Exception ex) {
             log.error("錯(cuò)誤 - 對(duì)word的操作發(fā)生錯(cuò)誤");
             log.error("原因 - " + ex.getMessage());
             throw new LTOAException(LTOAException.ERR_UNKNOWN, "對(duì)word的操作發(fā)生錯(cuò)誤("
                        + this.getClass().getName() + ".wordAsDbOrToHtml())", ex);
         } finally {
             closeDocument();
             closeWord();
         }
      
       }

       /**
        * 將word保存至數(shù)據(jù)庫(kù)
        * @param wordFilePath
        * @param RecordID
        * @throws LTOAException
        */
        public void wordAsDatabase(String wordFilePath, String RecordID) throws LTOAException {

           Connection conn = null;
           PreparedStatement pstmt = null;
           PoolingDataSource pool = null;
           
           File file = null;
        
           String sql = "";
           try {
               sql = " UPDATE Document_File SET FileBody = ? WHERE RecordID = ? ";
                
               pool = new PoolingDataSource();
               conn = pool.getConnection();
            
               file = new File(wordFilePath);
               InputStream is = new FileInputStream(file);
               byte[] blobByte = new byte[is.available()];
               is.read(blobByte);
               is.close();

              pstmt = conn.prepareStatement(sql);
              pstmt.setBinaryStream(1,(new ByteArrayInputStream(blobByte)), blobByte.length);
              pstmt.setString(2, RecordID); 
              pstmt.executeUpdate();
         
            } catch (Exception ex) {
                log.error("錯(cuò)誤 - 表 Document_File 更新數(shù)據(jù)發(fā)生意外錯(cuò)誤");
                log.error("原因 - " + ex.getMessage());
                throw new LTOAException(LTOAException.ERR_UNKNOWN,
                       "表Document_File插入數(shù)據(jù)發(fā)生意外錯(cuò)誤("
                        + this.getClass().getName() + ".wordAsDatabase())", ex);
             } finally {
                 pool.closePrepStmt(pstmt);
                 pool.closeConnection(conn);
            }
        }
     
       /**
        * 得到一個(gè)唯一的編號(hào)
        * @return 編號(hào)
        */
       public String getRecordID() {
      
         String sRecordID = "";
      
         java.util.Date dt=new java.util.Date();
            long lg=dt.getTime();
            Long ld=new Long(lg);
            sRecordID =ld.toString();
           
            return sRecordID;
        }
     
        /**
         * 得到保存word和html需要的路徑
         * @param systemType 模塊類型 givInfo, sw, fw
         * @param fileType 文件類型 doc, html
         * @param recID 文件編號(hào)
         * @return 路徑
         */
         public String getWordFilePath(String systemType, String fileType, String recID) {
      
           String filePath = "";
      
           File file = new File(this.getClass().getResource("/").getPath());

           filePath = file.getPath().substring(0, file.getPath().length() - 15);
           
           if(systemType.equalsIgnoreCase("govInfo")) {
       
               if(fileType.equalsIgnoreCase("doc"))
                   filePath = filePath + "/uploadFiles/govInfo/document/" + recID + ".doc";
                else if(fileType.equalsIgnoreCase("htm"))
                   filePath = filePath + "/HTML/govInfo/" + recID + ".htm";
            } else if(systemType.equalsIgnoreCase("sw")){
                if(fileType.equalsIgnoreCase("doc"))
                  filePath = filePath + "/uploadFiles/sw/document/" + recID + ".doc";
                else if(fileType.equalsIgnoreCase("htm"))
                  filePath = filePath + "/HTML/sw/" + recID + ".htm";
             } else if(systemType.equalsIgnoreCase("fw")) {
                  if(fileType.equalsIgnoreCase("doc"))
                     filePath = filePath + "/uploadFiles/fw/document/" + recID + ".doc";
                  else if(fileType.equalsIgnoreCase("htm"))
                     filePath = filePath + "/HTML/fw/" + recID + ".htm";
             }
      
            return filePath;
        }
    }

    Feedback

    # re: java生成word,html文件并將內(nèi)容保存至數(shù)據(jù)庫(kù)  回復(fù)  更多評(píng)論   

    2006-03-02 14:01 by chinyon
    你的文章給了我很大的啟發(fā)。但我下載不到1.9的版本,用1.7的時(shí)候出現(xiàn)很多問(wèn)題,請(qǐng)問(wèn)能否發(fā)給我一份。
    qy@mail.nwpu.edu.cn
    qq:27551283
    十分感謝。

    # re: java生成word,html文件并將內(nèi)容保存至數(shù)據(jù)庫(kù)  回復(fù)  更多評(píng)論   

    2006-10-09 10:58 by 小徐
    thanks

    # re: java生成word,html文件并將內(nèi)容保存至數(shù)據(jù)庫(kù)  回復(fù)  更多評(píng)論   

    2007-07-30 08:33 by 安利
    您的博客頂強(qiáng),以后得多來(lái)學(xué)習(xí)下!

    # re: java生成word,html文件并將內(nèi)容保存至數(shù)據(jù)庫(kù)  回復(fù)  更多評(píng)論   

    2008-01-18 19:07 by 浪子
    哥們,要是把模板中圖片也生成出來(lái)呢?不顯示而是一個(gè)空的框框,請(qǐng)教下,有誰(shuí)知道怎么辦呢?謝謝!我的郵件是 wangl@95068.com

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    分享到:
    主站蜘蛛池模板: 免费人成视频在线观看免费| 国产在线观看免费av站| 国产gav成人免费播放视频| 日韩在线观看视频免费| 亚洲Av无码专区国产乱码DVD | 亚洲乱码中文论理电影| 午夜国产大片免费观看| 日本高清高色视频免费 | 日本免费人成网ww555在线| 亚洲国产日韩在线成人蜜芽| 可以免费观看的一级毛片| 日本免费污片中国特一级| 久久久亚洲精华液精华液精华液| 国产亚洲一区二区三区在线观看 | 亚洲欧洲无码AV电影在线观看| 免费观看无遮挡www的视频| 一级白嫩美女毛片免费| 亚洲中文无码线在线观看| 亚洲精品国自产拍在线观看| 100000免费啪啪18免进| 久久高潮一级毛片免费| 国产成人亚洲综合网站不卡| 久久青青成人亚洲精品| 亚洲 小说区 图片区 都市| 99久久精品国产免费| 国产精品免费视频观看拍拍| 亚洲www77777| 久久亚洲精品成人AV| 国产成人精品亚洲精品| 成人免费淫片在线费观看| 久操视频在线免费观看| 日本黄页网址在线看免费不卡| 亚洲AV无码乱码在线观看代蜜桃| 亚洲人成人77777网站| 免费大香伊蕉在人线国产| 国拍在线精品视频免费观看| 久久精品免费视频观看| 久久久免费观成人影院| 丰满妇女做a级毛片免费观看| 亚洲精品成a人在线观看夫| 亚洲人成777在线播放|