本文实例讲述了jsp生成word文档,excel文档及pdf文档的方法。分享给大家供大家参考,具体如下:
在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查询一些数据以某种格式输出来,并以word文档的形式展现,有时许多word文档保存到数据库中的某个表的blob字段里,服务器再把保存在blob字段中的图片文件展现给用户。通过网上查找发现很少有关于此类的文章,现在整理起来供大家参考。
1 在client端直接生成word文档
在jsp页面上生成word文档非常简单,只需把contenttype=”text/html”改为contenttype="application/msword; charset=gb2312"即可,代码如下:
复制代码 代码如下:
<%@ page contenttype="application/msword; charset=gb2312" %>
通过设置可以使原来页面的内容在word中表现出来。
如果需要把word文档下载下来,只需在jsp页面上面加上如下代码:
<%
response.setheader("content-disposition", "attachment;filename=filename.doc");
%>
其中filename.doc中filename是要下载的word文档的文件名,可以通过<%=docname%>来自行定制,如下
<%
response.setheader("content-disposition", "attachment;filename=<%=docname%>.doc");
%>
这样提供一个提示信息供用户选择。
小技巧:如果程序员需要在生成word文档的时候按照自己预先在word上设计好的格式,可以复制word格式然后粘贴到frontpage中,取html代码贴到jsp页面即可。
2 在客户端输出存在数据库中的word实体
这里只讨论在client输出oracle中blob字段中的word文档实体。其中调用了类getblobbean,该类提供了从oracle中取出blob功能,代码如下:
package yourpackage;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import oracle.sql.*;
import beans.yourbeanpackage. getblobbean;
/**
* <p>title: </p>
* <p>description: </p>
* <p>copyright: copyright (c) 2004</p>
* <p>company: </p>
* @author not attributable
* @version 1.0
*/
public class getblobservlet1 extends httpservlet {
//设置输出内容类型,这个设置很重要,否则客户端浏览器不能识别输出内容,导致弹出下载的对话框。
private static final string content_type = "application/msword;charset=gb2312";
//initialize global variables
public void init() throws servletexception {
}
//process the http get request
public void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
response.setcontenttype(content_type);
perform(request,response);
}
public void perform(httpservletrequest request, httpservletresponse response){
try{
//该类功能是从oracle哭中取出blob实体
getblobbean getblob=new getblobbean();
outputstream sos = response.getoutputstream();
getblob.connfunction();
oracle.sql.blob blob=getblob.getblob("cehui");
//输出word文档
if(blob!=null){
inputstream pi = blob.getbinarystream();
int blobsize =(int)blob.length();
byte[] blobbytes = new byte[blobsize];
int bytesread = 0;
while ((bytesread = pi.read(blobbytes)) != -1) {
sos.write(blobbytes, 0, bytesread);
}
pi.close();
sos.flush();
sos.close();
}
getblob.dropconnfunction();
}catch(exception e){
system.out.println(e.tostring());
}
}
//clean up resources
public void destroy() {
}
}
3 在client端直接生成excel文档
<%@ page contenttype="application/vnd.ms-excel; charset=gb2312" %>
<%
response.setheader("content-disposition", "attachment;filename=20050304.xls");
%>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>生成</title>
</head>
<body>
生成例子excel 。 用word排版面,倒出html 把代码拷贝到网页里,然后这个jsp页面打印你就随心所欲的控制了。
</body>
</html>
4 在client端直接生成pdf文档
需要下载jar包:以下代码在jdk1.4 resin2.16 下测试通过
itext包 http://mesh.dl.sourceforge.net/sourceforge/itext/itext-1.3.5.jar
字体包http://itext.sourceforge.net/downloads/itextasian.jar
jsp生成到客户ie端直接打开
ie_pdf.jsp:
<%@
page import="java.io.*,java.awt.color,com.lowagie.text.*,com.lowagie.text.pdf.*"%>
<%
response.setcontenttype( "application/pdf" );
document document = new document();
bytearrayoutputstream buffer = new bytearrayoutputstream();
pdfwriter writer=pdfwriter.getinstance( document, buffer );
document.open();
document.add(new paragraph("hello world"));
document.close();
dataoutput output = new dataoutputstream( response.getoutputstream() );
byte[] bytes = buffer.tobytearray();
response.setcontentlength(bytes.length);
for( int i = 0; i < bytes.length; i++ ) { output.writebyte( bytes[i] ); }
%>
在服务器端生成不下载。
server_pdf.jsp:
<%@ page import ="com.lowagie.text.*,com.lowagie.text.pdf.*, java.io.*"%>
<%
string filename = "d://test//111111.pdf" ;
document document = new document(pagesize.a4);
servletoutputstream out1 = response.getoutputstream();
try{
pdfwriter writer = pdfwriter.getinstance(document, new fileoutputstream(filename) );
document.open();
document.add(new paragraph("hello world中文支持"));
document.close();
}
catch(exception e){}
%>
使用itext可以设置文字的字体,对于我们中国的程序员来说如何显示中文是最紧要的问题。幸好itext中有一个专门的包用来设置亚洲国家的字体你可以从http://itext.sourceforge.net/downloads/itextasian.jar下载这个包。然后把它直接放到你的classpath中就可以了。如何设置字体呢?
basefont bfchinese = basefont.createfont("stsong-light", "unigb-ucs2-h", basefont.not_embedded);
font fontchinese = new font(bfchinese, 12, font.normal);
在上面的代码中设置了中文字体的显示,你只要使用下面的代码就可以包中文加到pdf中了
string title = "我爱喝咖啡";
paragraph t = new paragraph(title, fontchinese);
doc.add(t);
希望本文所述对大家jsp程序设计有所帮助。
【说明】:
本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!