[原创]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 ...
随机推荐
- ES6 学习 -- 箭头函数(=>)
(1).只有一个参数且只有一句表达式语句的,函数表达式的花括号可以不写let test = a => a; // 只有一个参数a,这里的表达式相当于 "return a" ( ...
- 让er studio 生成带说明的sql
一直使用er studion 来建数据库的模型图. 用了几年苦于 erstudion 不能生成带说明注释的sql 语句,每次生成实体之后都要自己去加注释. 今天根据外国朋友的资料找到了办法 需要自己建 ...
- JS去除字符串拼接末尾的符号(逗号)
前言:在JS中,有时需要进行字符串的拼接,而拼接的字符串以某种符号分隔,在拼接好的字符串末尾会多出一个分隔符,这时我们可以采取以下几种方法来去除末尾的分隔符. 方法一:使用substring() 和 ...
- Android开发 LiveData与MutableLiveData详解
前言 LiveData与ViewMode是经常搭配在一起使用的,但是为了不太混乱,我还是拆分开来说明,此篇博客只讲解 LiveData 与 MutableLiveData的概念与使用方式(但是会涉及到 ...
- COGS2356 【HZOI2015】有标号的DAG计数 IV
题面 题目描述 给定一正整数n,对n个点有标号的有向无环图进行计数. 这里加一个限制:此图必须是弱连通图. 输出答案mod 998244353的结果 输入格式 一个正整数n. 输出格式 一个数,表示答 ...
- VS2010-MFC(文档、视图和框架:概述)
转自:http://www.jizhuomi.com/software/221.html 前面几节讲了菜单.工具栏和状态栏的使用,本节开始将为大家讲解文档.视图和框架的知识. 文档.视图和框架简介 在 ...
- HttpUrlConnection使用详解--转AAAAA
http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpConnection.html HttpUr ...
- 创建自定义ssl证书用于https
这里,不探究证书原理.我们要完成的任务是,自己充当CA,然后签出证书供服务器使用. 本次教程是在windows实现,实验之前,确认自己的电脑中有openssl程序.如果没有,博主帮你准备了一个:htt ...
- 17.获取代理ip
import redis import telnetlib import urllib.request from bs4 import BeautifulSoup r = redis.Redis(ho ...
- Bootstrap——设置Tab标签切换
最近一个小项目需要用Tab标签切换显示不同div内容,用到了Bootstrap里面的东西,但是在Bootstrap3教程里却没有找到对应的代码,这里记录一下,方便以后快速查阅学习. 代码如下: < ...