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

    在线打开文件的效果图:

  • 相关阅读:
    AngularJS Insert Update Delete Using PHP MySQL
    Simple task manager application using AngularJS PHP MySQL
    AngularJS MySQL and Bootstrap Shopping List Tutorial
    Starting out with Node.js and AngularJS
    AngularJS CRUD Example with PHP, MySQL and Material Design
    How to install KVM on Fedora 22
    Fake_AP模式下的Easy-Creds浅析
    河南公务员写古文辞职信
    AI
    政协委员:最大愿望是让小学生步行上学
  • 原文地址:https://www.cnblogs.com/pageoffice/p/11776074.html
Copyright © 2011-2022 走看看