zoukankan      html  css  js  c++  java
  • [原创]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/,点击首页的立即下载。

    在线打开文件的效果图:

  • 相关阅读:
    HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
    BZOJ 1010 玩具装箱toy(四边形不等式优化DP)(HNOI 2008)
    分布式事务二阶提交DTS系统
    flume原理及代码实现
    Liferay JSP Tag Libraries介绍
    如何用maven tycho构建自己的Eclipse RCP应用
    如何合并两个git commit
    推荐一个好用的git图形化工具
    git gc干了啥
    如何把VS Code的Language Server Protocol整合到Eclipse中来
  • 原文地址:https://www.cnblogs.com/pageoffice/p/11776074.html
Copyright © 2011-2022 走看看