注意:編寫此項目時,請先手動編寫**.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資料