[原創]Java調用PageOffice在線打開數據庫中保存的Word文件


PageOffice產品和數據庫是兩個獨立的概念,嚴格來說兩者之間沒有任何本質關系。PageOffice不依賴數據庫而存在,但是數據庫和PageOffice可以結合使用來完成某些復雜的業務邏輯。例如:PageOffice可以打開數據庫中的二進制流文件,也可以將Word或者Excel整個文檔或者文檔中的一部分數據保存到數據庫中,這里的數據庫可以是任意數據庫,如:Sqlite,Access,SQL Server,Oracle,MySQL,DB2,Sybase等。下面我們就此問題展開詳細論述。

1)打開文檔的Stream.jsp頁面:

    PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
    poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); 
    ……
    poCtrl1.setSaveFilePage("SaveFile.jsp?id=1");
    poCtrl1.webOpen("Openstream.jsp?id=1", OpenModeType.docNormalEdit, "張三");

2)下載文檔的Openstream.jsp頁面:

    String id = request.getParameter("id");
    Class.forName("org.sqlite.JDBC");
    String strUrl = "jdbc:sqlite:" + this.getServletContext().getRealPath("demodata/DataBase.db");
    Connection conn = DriverManager.getConnection(strUrl);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from stream where id = "+ id);

    if (rs.next()) {
        //******讀取磁盤文件,輸出文件流 開始****
        byte[] imageBytes = rs.getBytes("Word");
        int fileSize = imageBytes.length;
        response.reset();
        response.setContentType("application/msword");
        response.setHeader("Content-Disposition","attachment; filename=down.doc"); 
        response.setContentLength(fileSize);
        OutputStream outputStream = response.getOutputStream();
        outputStream.write(imageBytes);
        outputStream.flush();
        outputStream.close();
        outputStream = null;
        //******讀取磁盤文件,輸出文件流 結束*************
    }
    rs.close();
    conn.close();

3) 保存文件到數據庫中SaveFile.jsp的代碼:

    FileSaver fs = new FileSaver(request, response);
    String err = "";
    if (request.getParameter("id") != null
            && request.getParameter("id").trim().length() > 0) {
        String id = request.getParameter("id").trim();
        Class.forName("org.sqlite.JDBC");
            String strUrl = "jdbc:sqlite:"
                + this.getServletContext().getRealPath("demodata/") + "\\DataBase.db";
        Connection conn = DriverManager.getConnection(strUrl);
        String sql = "UPDATE  Stream SET Word=?  where ID=" + id;
        PreparedStatement pstmt = null;
        pstmt = conn.prepareStatement(sql);
                 pstmt.setBytes(1,fs.getFileBytes());
        //pstmt.setBinaryStream(1, fs.getFileStream(),fs.getFileSize());
        pstmt.executeUpdate();
        pstmt.close();
        conn.close();

        fs.setCustomSaveResult("ok");
    } else {
        err = "<script>alert('未獲得文件的ID,保存失敗');</script>";
    }
    fs.close();

 

注:該示例的完整代碼和詳細演示請參考PageOffice產品開發包中的Samples或者Samples4示例:二、2、打開保存數據庫中的文件(以Word為例)
PageOffice下載地址,訪問http://www.zhuozhengsoft.com/,點擊首頁的立即下載。

在線打開文件的效果圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM