Posted on 2006-08-31 23:11
sugo 阅读(3954)
评论(0) 编辑 收藏
关于word文档操作, 网上不少这样的例子,好像都是一篇文章。word文档嵌入到网页中好像比较简单一些。加个报文头基本上就可以实现此功能。而导出数据到word文档中,我可费了不少的脑细胞。闲话少说,步入正题。。。:)
网页中嵌入word文档,在jsp程序开头部分加入<%@ page contentType="application/msword;charset=GBK"%>这些代码,即可实现。比较简单,相信很多人都知道这一点了。
费脑筋的是将一张报表或者一张登记表导入到word文档中。报表(登记表)都是动态生成的。那么首先的问题是如何获得一个动态网页中的内容。我以前使用的BufferedReader,PrintWriter,BufferedInputStream,BufferedOutputSteam都不起作用了,原因就是他们不能读取动态生成的网页内容。因此,我想到了URL这个类,获得内容的代码如下:
java.net.URL l_url = new java.net.URL("http://localhost:9000/rlzy/employee/employee_resume.jsp?id="+emp_id);
java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
l_connection.connect();
l_urlStream = l_connection.getInputStream();
java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));
while ((sCurrentLine = l_reader.readLine()) != null)
{
content+=sCurrentLine;
}
content即为我们想要得到的动态内容。
导出数据的话,使用BufferedInputStream 和 BufferedOutputStream 。但前提是把得到的动态内容先输出到一个临时的html网页中,即把它先变成一个静态文件。这样BufferedInputStream 和BufferedOutputStream 就可以获得要读取和输出的内容。读取完毕,再把这个临时的html网页删除。这是网上流传的代码:
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(内容资源的路径));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff,0,bytesRead);
}
} catch(final IOException e) {
System.out.println ( "出现IOException." + e );
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
此外,导出内容到word文档后,还可能会出现格式不正确的问题。我就遇到了html表格导出到word就发生变化的情况。这种情况具体原因应该是两种不同文件编码的问题。我是通过修改源html文件解决的问题。至于以后如果还碰到类似问题的话,首先看一下word文档和html文档是从哪个地方格式开始变化了,找到之后再对症下药。如果你觉得这种解决方法没什么技术含量的话,你可以根据内容手动输出。。。哈
。。。。。。。。。。。学到了一些东西。。。。。。。。。。。。