[原创]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/,点击首页的立即下载。
在线打开文件的效果图:
[原创]Java调用PageOffice在线打开数据库中保存的Word文件的更多相关文章
- [原创]Java集成PageOffice在线打开编辑word文件 - Spring Boot
开发环境:JDK1.8.Eclipse.Sping Boot + Thymeleaf框架. 一. 构建Sping Boot + Thymeleaf框架的项目(不再详述): 1. 新建一个maven p ...
- [原创]Java调用PageOffice给Word中的Table赋值
Word中的table操作需要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table.因此,要想使用table,则必须在w ...
- [原创]Java开发如何在线打开Word文件
此方案使用了PageOffice产品实现在线打开Word文档: 1. 首先从PageOffice官网下载产品开发包,http://www.zhuozhengsoft.com/dowm/ ,下载Page ...
- [转载]Java集成PageOffice在线打开编辑word文件 - Spring Boot
开发环境:JDK1.8.Eclipse.Sping Boot + Thymeleaf框架. 一. 构建Sping Boot + Thymeleaf框架的项目(不再详述): 1. 新建一个maven p ...
- [原创]java调用PageOffice生成word
一.在开发OA办公或与文档相关的Web系统中,难免会遇到动态生成word文档的需求,为了解决工作中遇到导出word文档的需求,前一段时间上网找了一些资料,在word导出这方面有很多工具可以使用,jac ...
- java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间
java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...
- 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转
效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载]) 本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较 ...
- php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现
php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现 function data_uri($contents, $mime) { $base64 = base64_encode($c ...
- 【Android Developers Training】 26. 在SQL数据库中保存数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
随机推荐
- xwiki系统 知识库 xwiki
1.下载tomcat tar -zxvf apache-tomcat-8.0.14.tar.gz mv apache-tomcat-8.0.14 tomcat-xwiki-8.0 2.下载xwik ...
- navicat远程连接报1045 access denied for user'root'@'ip'(using pasword:yes".............
这个其实很简单,授权就行了.如下 1.GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;2 ...
- python实现操作excel,数据写入excel的一行或者一列
# _*_ coding:utf-8 _*_ import random import xlwt,string class ImportData(object): def create_num(sel ...
- c++ strlen() 函数
{ char *buf = new char[1024]; ZeroMemory(buf,1024) for(int i = 0; i < 1023; i++) { buf[i] = '5'; ...
- thinkphp 模板注释
模板支持注释功能,该注释文字在最终页面不会显示,仅供模板制作人员参考和识别. 大理石平台厂家 单行注释 格式: {/* 注释内容 */ } 或 {// 注释内容 } 例如: {// 这是模板注释内容 ...
- gitbook新版本"gitbook build"命令导出的html不能跳转的解决办法
使用的是win7系统,gitbook新版本不支持html跳转功能,所以要降版本至2.6.7 解决办法如下: 第一步: 生成时指定gitbook的版本, 本地没有会先下载 gitbook build - ...
- Unable to find explicit activity class报错问题解决方法
转:http://hi.baidu.com/mz_mz/item/f5672ad814e1ce30e2108f69 1.首先查看是否在已经在AndroidMainfest.xml中添加了你的Activ ...
- NPM 使用介绍(包管理工具,解决NodeJS代码部署上的很多问题)
引用地址:http://www.runoob.com/nodejs/nodejs-npm.html NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问 ...
- 响应式编程(Reactive Programming)(Rx)介绍
很明显你是有兴趣学习这种被称作响应式编程的新技术才来看这篇文章的. 学习响应式编程是很困难的一个过程,特别是在缺乏优秀资料的前提下.刚开始学习时,我试过去找一些教程,并找到了为数不多的实用教程,但是它 ...
- Ubuntu 上如何安装Docker
Docker 是一个开源项目,为开发者和系统管理员提供了一个开放的平台,在任何地方通过打包和运行应用程序作为一个轻量级的容器.Docker 在软件容器内自动部署应用程序.Docker 最开始由 Sol ...