注意:编写此项目时,请先手动编写**.jrxml
或者用ireport生成**.jrxml或**.jasper
注:java导出报表与web项目显示报表方法其实是相同的,只不过有一句代码不同,如下
maven依赖
通过java代码生成各种格式报表文件
jdbc文件
生成 各种格式
与javaweb整合
本文用的是jasperreport最新版本6.0
web开发建议下载jasperreports library --> jasperreports-xxx-project 里面包含demo以及api
项目结构:
jar包:新手可以把下载下来的所有jar包都放进去,熟练之后可以根据自己所需加入相关jar包
webroot下:新建reports文件夹,用来存放jrxml、jasper文件;build.xml(放入进去之后会出现蚂蚁图标);
jrxml文件代码,此代码是xml格式文件,可以自己手写,也可以安装 ireport设计编译成jasper文件,为了入门下面纯手写
dbreport.jrxml:
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8" ?>
<jasperreport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
xsi:schemalocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="dbreport" >
<!-- jasperreport标签中name="dbreport"需要对应外面文件名, $p{}为填充参数,$v{}为值 ,$f{}为查询值或者为jr数据-->
<!-- 页面样式标签 --属性:
forecolor(前景色,就是文本)
backcolor(背景色)
halign(水平位置center, justified, left, right)
valign(垂直位置bottom, middle, top)
border(边框1point, 2point, 4point, dotted, none, thin)
bordercolor(边框颜色)
fontname(字体)
fontsize(字体大小)
isbold,isitalic,isunderline,isstrikethrough(粗体,斜体,下画线,..)
linespacing(1_1_2, double, single行间距)
rotation(旋转,left, none, right,转的是90度)
isstyledtext(指示这个element是否用style,true,false)
isdefault(说明这个样式是否默认样式)
-->
<style name="pageheader" forecolor="#ffffff" backcolor="#333333"/>
<!-- 参数标签 -->
<parameter name="username" class="java.lang.string"/>
<!-- 查询语句标签 -->
<querystring>
<![cdata[
select id,user_name as name,email,qq from user where user_name=$p{username}
]]>
</querystring>
<!-- 显示字段标签 -->
<field name="id" class="java.lang.integer" />
<field name="name" class="java.lang.string" />
<field name="email" class="java.lang.string" />
<field name="qq" class="java.lang.string" />
<pageheader>
<band height="30">
<statictext>
<reportelement style="pageheader" x="0" y="5" width="55" height="15"/>
<textelement textalignment="center"/>
<text><![cdata[id]]></text>
</statictext>
<reportelement style="pageheader" x="55" y="5" width="205" height="15"/>
<text><![cdata[name]]></text>
<reportelement style="pageheader" x="160" y="5" width="255" height="15"/>
<text><![cdata[email]]></text>
<reportelement style="pageheader" x="260" y="5" width="255" height="15"/>
<text><![cdata[qq]]></text>
</band>
</pageheader>
<!-- 显示内容-->
<detail>
<band height="20">
<textfield>
<reportelement x="0" y="4" width="50" height="15"/>
<textelement textalignment="right"/>
<textfieldexpression><![cdata[$f{id}]]></textfieldexpression>
</textfield>
<textfield isstretchwithoverflow="true">
<reportelement positiontype="float" x="55" y="4" width="100" height="15"/>
<textfieldexpression><![cdata[$f{name}]]></textfieldexpression>
<reportelement positiontype="float" x="160" y="4" width="100" height="15"/>
<textfieldexpression><![cdata[$f{email}]]></textfieldexpression>
<reportelement positiontype="float" x="260" y="4" width="255" height="15"/>
<textfieldexpression><![cdata[$f{qq}]]></textfieldexpression>
<line>
<reportelement positiontype="float" x="0" y="19" width="515" height="1" forecolor="#808080"/>
</line>
</detail>
</jasperreport>
</span>
后台代码:testservlet.java
<span style="font-size:14px;">package servlets;
import java.io.file;
import java.io.ioexception;
import java.io.inputstream;
import java.sql.resultset;
import java.util.hashmap;
import java.util.map;
import javax.servlet.servletcontext;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import util.jdbc;
import net.sf.jasperreports.engine.jrdatasource;
import net.sf.jasperreports.engine.jrexporterparameter;
import net.sf.jasperreports.engine.jrresultsetdatasource;
import net.sf.jasperreports.engine.jaspercompilemanager;
import net.sf.jasperreports.engine.jasperexportmanager;
import net.sf.jasperreports.engine.jasperfillmanager;
import net.sf.jasperreports.engine.jasperprint;
import net.sf.jasperreports.engine.jasperreport;
import net.sf.jasperreports.engine.jasperrunmanager;
import net.sf.jasperreports.engine.data.jrmaparraydatasource;
import net.sf.jasperreports.engine.export.jrhtmlexporter;
import net.sf.jasperreports.engine.export.jrhtmlexporterparameter;
import net.sf.jasperreports.engine.export.jrpdfexporter;
import net.sf.jasperreports.engine.export.jrxlsexporter;
import net.sf.jasperreports.engine.export.jrxlsexporterparameter;
import net.sf.jasperreports.engine.util.jrloader;
import net.sf.jasperreports.view.jasperviewer;
public class testservlet extends httpservlet {
@override
protected void service(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
try{
servletcontext context = this.getservletconfig().getservletcontext();
//jaspercompilemanager 编译管理器
//jasperfillmanager 填充管理器
//jrxmlloader xml加载器
//jasperprintmanager 打印管理器
//jasperexportmanager 导出管理器
//jasperrunmanager 运行管理器
jaspercompilemanager.compilereporttofile(context.getrealpath("/reports/dbreport.jrxml"));//编译jrxml文件,生成jasper文件
map map=new hashmap();//参数map
map.put("username", "admin");
//生成jrprint文件
//jasperfillmanager.fillreporttofile(context.getrealpath("/reports/dbreport.jasper"), map, jdbc.conn);
file jasperfile=new file(context.getrealpath("/reports/dbreport.jasper"));
jasperreport jasperreport =(jasperreport)jrloader.loadobject(jasperfile);
jasperprint jasperprint = jasperfillmanager.fillreport(jasperreport, map,jdbc.conn);
//将查询的数据填充到报表中
//string sql="select id,user_name as name,email,qq from user";
//resultset rs=jdbc.getresultset(sql);
//jrresultsetdatasource jr=new jrresultsetdatasource(rs);
//jasperfillmanager.fillreporttofile(context.getrealpath("/reports/dbreport.jasper"), map, jr);
//jdbc.closeall(rs, jdbc.statement, null);//关闭数据连接
//jasperrunmanager.runreporttohtmlfile(context.getrealpath("/reports/dbreport.jasper"), map, jdbc.conn);
//jasperrunmanager.runreporttohtmlfile(context.getrealpath("/reports/dbreport.jasper"), map, jr);
//生成html文件
//jasperrunmanager.runreporttohtmlfile(context.getrealpath("/reports/dbreport.jasper"), "e:/test.html", map, jdbc.conn);
//inputstream inputstream=getservletconfig().getservletcontext().getresourceasstream(context.getrealpath("/reports/dbreport.jasper"));
//jasperrunmanager.runreporttopdfstream(inputstream, response.getoutputstream(), map, jr);
//-----以map数组为数据源,生成html文件
jasperrunmanager.runreporttohtmlfile(context.getrealpath("/reports/dbreport.jasper"), "e:/test2.html", map, getreportdatasource());
//生成html数据
/*
jrhtmlexporter html = new jrhtmlexporter();
html.setparameter(jrhtmlexporterparameter.jasper_print, jasperprint);
html.setparameter(jrhtmlexporterparameter.output_writer,response.getwriter());
html.setparameter(jrhtmlexporterparameter.is_using_images_to_align,boolean.false);
html.setparameter(jrexporterparameter.character_encoding, "utf-8");
html.exportreport();
*/
//生成excel
jrxlsexporter xls=new jrxlsexporter();
xls.setparameter(jrxlsexporterparameter.jasper_print, jasperprint);
xls.setparameter(jrxlsexporterparameter.output_stream, response.getoutputstream());
xls.setparameter(jrxlsexporterparameter.is_one_page_per_sheet, boolean.false);
xls.setparameter(jrxlsexporterparameter.is_white_page_background, boolean.false);
response.setheader("content-disposition", "attachment;filename=first.xls");
response.setcontenttype("application/vnd_ms-excel");
xls.exportreport();
//生成pdf
jrpdfexporter pdf = new jrpdfexporter();
pdf.setparameter(jrexporterparameter.jasper_print, jasperprint);
pdf.setparameter(jrexporterparameter.output_stream, response.getoutputstream());
response.setheader("content-disposition", "attachment;filename=first.pdf");
response.setcontenttype("application/pdf");
response.setcharacterencoding("utf-8");
pdf.exportreport();
}catch(exception e){
e.printstacktrace();
}
}
private jrdatasource getreportdatasource(){
//new jrmaparraydatasource(getmaparray());这里也可以传自定义对象数组,对象属性字段必须对应dbreport.jrxml中显示数据字段
jrmaparraydatasource datasource=new jrmaparraydatasource(getmaparray());
return datasource;
private map[] getmaparray(){
//map key键必须对应dbreport.jrxml中显示数据字段
map map1=new hashmap();
map1.put("id", 1);
map1.put("name", "aaa");
map1.put("email", "[email protected]");
map1.put("qq", "111");
map map2=new hashmap();
map2.put("id", 2);
map2.put("name", "bbb");
map2.put("email", "[email protected]");
map2.put("qq", "222");
map map3=new hashmap();
map3.put("id", 3);
map3.put("name", "ccc");
map3.put("email", "[email protected]");
map3.put("qq", "333");
map[] maparray=new map[3];
maparray[0]=map1;
maparray[1]=map2;
maparray[2]=map3;
return maparray;
}
jdbc:
<span style="font-size:14px;">package util;
import java.sql.connection;
import java.sql.drivermanager;
import java.sql.statement;
public class jdbc {
public static string driver="com.mysql.jdbc.driver";
public static string url="jdbc:mysql://localhost:3306/myapp";
public static string user="root";
public static string pwd="root";
public static connection conn=getconnection();
public static statement statement=getstatement();
private static connection getconnection(){
if(conn==null){
try{
class.forname(driver);
conn=drivermanager.getconnection(url,user,pwd);
}catch(exception e){
e.printstacktrace();
}
return conn;
private static statement getstatement(){
if(statement==null){
statement=conn.createstatement();
return statement;
public static resultset getresultset(string sql){
resultset rs=null;
rs=statement.executequery(sql);
return rs;
public static void closeall(resultset rs,statement st,connection cn){
if(rs!=null){
rs.close();
if(st!=null){
st.close();
if(cn!=null){
cn.close();
执行效果:html数据