[原创]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/,点击首页的立即下载。

在线打开文件的效果图:

 

posted @ 2019-11-01 11:38  大方无隅  阅读(1142)  评论(0编辑  收藏  举报