欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JSP生成WORD文档,EXCEL文档及PDF文档的方法

程序员文章站 2022-05-03 15:34:35
本文实例讲述了jsp生成word文档,excel文档及pdf文档的方法。分享给大家供大家参考,具体如下: 在web-oa系统中,公文管理好象不可或缺,有时需要从数据库中查...

本文实例讲述了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程序设计有所帮助。