天天看點

javaWeb+JasperReport報表開發簡單執行個體

在網上搜尋了很多JasperReport報表開發的例子,基本上都是說的一些理論知識,沒有一個直接用代碼直覺表達的,想必大家想學習jasperReport報表的開始,都希望能夠直覺的看到代碼,研究出代碼執行後的效果是什麼,而不是一大堆的理論,說這些對于剛開始學的有毛用,還不如直接看代碼,在代碼中多寫點注釋來的快。

本文用的是JasperReport最新版本6.0

JasperReport官網:community.jaspersoft.com

web開發建議下載下傳JasperReports library --> jasperreports-xxx-project 裡面包含demo以及api

項目結構:

jar包:新手可以把下載下傳下來的所有jar包都放進去,熟練之後可以根據自己所需加入相關jar包

WebRoot下:建立reports檔案夾,用來存放jrxml、jasper檔案;build.xml(放入進去之後會出現螞蟻圖示);

javaWeb+JasperReport報表開發簡單執行個體

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>
			<staticText>
				<reportElement style="pageHeader"  x="55" y="5" width="205" height="15"/>
				<text><![CDATA[Name]]></text>
			</staticText>
			<staticText>
				<reportElement style="pageHeader"  x="160" y="5" width="255" height="15"/>
				<text><![CDATA[Email]]></text>
			</staticText>
			<staticText>
				<reportElement style="pageHeader"  x="260" y="5" width="255" height="15"/>
				<text><![CDATA[QQ]]></text>
			</staticText>
		</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>
			</textField>
			<textField isStretchWithOverflow="true">
				<reportElement positionType="Float" x="160" y="4" width="100" height="15"/>
				<textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
			</textField>
			<textField isStretchWithOverflow="true">
				<reportElement positionType="Float" x="260" y="4" width="255" height="15"/>
				<textFieldExpression><![CDATA[$F{qq}]]></textFieldExpression>
			</textField>

			<line>
				<reportElement positionType="Float" x="0" y="19" width="515" height="1" forecolor="#808080"/>
			</line>
		</band>
	</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;
	}
}
</span>
           

JDBC:

<span style="font-size:14px;">package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
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){
			try{
				statement=conn.createStatement();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return statement;
	}
	public static ResultSet getResultSet(String sql){
		ResultSet rs=null;
		try{
			rs=statement.executeQuery(sql);
		}catch(Exception e){
			e.printStackTrace();
		}
		return rs;
	}
	public static void closeAll(ResultSet rs,Statement st,Connection cn){
		try{
			if(rs!=null){
				rs.close();
			}
			if(st!=null){
				st.close();
			}
			if(cn!=null){
				cn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}
</span>
           

執行效果:html資料

javaWeb+JasperReport報表開發簡單執行個體

頁面的樣式是可以通過jrxml檔案的配置的,手寫肯定不太好看,iReport是jasperReport的可視化工具,可以下載下傳 iReport工具來設計。

上面代碼儲存之後,代碼前面可能會多出<span>标簽

繼續閱讀