有一个题库管理系统,难度系数共分5级,1级容易、2级较容易、3级一般、4级较难、5级难,从中抽出一定的题,组成一套试题,还要生成试题头,生成的试卷能用WORD来进行保存,修改等,请高手指点一下,试卷的生成应该怎么做,最好能给一部分代码参考.

解决方案 »

  1.   

    生成Word,似乎可以尝试一下POI,不过自从我上次了解POI以来,已经有5年了,所以不知道现在它对Word的支持情况如何。
      

  2.   

    java生成word,html文件并将内容保存至数据库 
    Posted on 2005-12-15 17:19 Kela 阅读(2715) 评论(3)  编辑 收藏 引用  
           在最近的一个项目中需要将一段字符类型的文本存为word,html并要将word的内容保存在数据库中,于是就有了如下的一个工具类,希望能对碰到这样需求的朋友提供点帮助。
           匆匆忙忙的就copy上来了,没有做一些删减,有一些多余的东西,有兴趣的朋友可以自行略去。我的注释相对比较清楚,可以按照自己的需求进行组合。
          在操作word的地方使用了jacob(jacob_1.9),这个工具网上很容易找到,将jacob.dll放置系统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;/**
     * 说明: 对word的操作 <p>
     *
     * @author   [email protected]
     */
    public class WordBridge {
     
       Log log = LogFactory.getLog("WordBridgt");
     
       private ActiveXComponent MsWordApp = null; 
       private Dispatch document = null; 
        
        /**
         * 打开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));
        }    /**
         * 创建新的文档
         *
         */
        public void createNewDocument() {
           Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
           document = Dispatch.call(documents, "Add").toDispatch();
        }    /**
         * 关闭文档 
         */
        public void closeDocument() {
          // 0 = wdDoNotSaveChanges
          // -1 = wdSaveChanges
          // -2 = wdPromptToSaveChanges
          Dispatch.call(document, "Close", new Variant(0));
          document = null;
        }    /**
         * 关闭word
         *
         */
        public void closeWord() {
           Dispatch.call(MsWordApp, "Quit");
           MsWordApp = null;
           document = null;
        } 
     
        /**
         * 插入文本
         * @param textToInsert 文本内容
         */
        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转换成html
         * @param htmlFilePath
         */
        public void wordToHtml(String htmlFilePath) {
             Dispatch.invoke(document,"SaveAs", Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, new int[1]);
         }    /**
         * 保存word的同时,保存一个html
         * @param text 需要保存的内容
         * @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("错误 - 对word的操作发生错误");
             log.error("原因 - " + ex.getMessage());
             throw new LTOAException(LTOAException.ERR_UNKNOWN, "对word的操作发生错误("
                        + this.getClass().getName() + ".wordAsDbOrToHtml())", ex);
         } finally {
             closeDocument();
             closeWord();
         }
      
       }   /**
        * 将word保存至数据库
        * @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("错误 - 表 Document_File 更新数据发生意外错误");
                log.error("原因 - " + ex.getMessage());
                throw new LTOAException(LTOAException.ERR_UNKNOWN,
                       "表Document_File插入数据发生意外错误("
                        + this.getClass().getName() + ".wordAsDatabase())", ex);
             } finally {
                 pool.closePrepStmt(pstmt);
                 pool.closeConnection(conn);
            }
        }
     
       /**
        * 得到一个唯一的编号
        * @return 编号
        */
       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 文件编号
         * @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;
        }
    }