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

    在线打开文件的效果图:

  • 相关阅读:
    AutoCAD DxfCode组码值说明
    AutoCAD DxfCode组码值类型
    C#类、静态类、静态变量,初始化执行顺序
    AutoCAD.NET二次开发:扩展数据之XData
    AutoCAD.NET二次开发:创建自定义菜单的两种方法比较
    AutoCAD.NET二次开发:创建自定义菜单(COM)
    AutoCAD.NET二次开发:创建自定义菜单(AcCui)
    发布ASP.NET网站时的设置
    Centos7安装Docker
    Ant Design Pro实现导出Excel
  • 原文地址:https://www.cnblogs.com/pageoffice/p/11776074.html
Copyright © 2020-2023  润新知