1. 程式人生 > >javaWeb+JasperReport報表開發簡單例項

javaWeb+JasperReport報表開發簡單例項

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

本文用的是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>
			<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資料

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

上面程式碼儲存之後,程式碼前面可能會多出<span>標籤

相關推薦

javaWeb+JasperReport報表開發簡單例項

在網上搜索了很多JasperReport報表開發的例子,基本上都是說的一些理論知識,沒有一個直接用程式碼直觀表達的,想必大家想學習jasperReport報表的開始,都希望能夠直觀的看到程式碼,研究出程式碼執行後的效果是什麼,而不是一大堆的理論,說這些對於剛開始學的有毛用,

JasperReport報表開發之轉置交叉表

for 不同的 結構 整理 result 無需 nbsp 數據 img 使用Jasper或BIRT等報表工具時,常會碰到一些很規的統計,用報表工具本身或SQL都難以處理,比方源數據不符合交叉表的要求,須要轉置後再呈現。集算器具有結構化強計算引擎,集成簡單。能夠協

java影象介面開發簡單例項-JLabel,JFileChooser,JMenu應用

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.File;import javax.swing.ImageIcon;import javax.swing.JFileChooser;imp

java影象介面開發簡單例項-JButton及事件的簡單應用

import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;i

openfire外掛開發簡單例項

網上找了半天openfire外掛開發的例子,都只是從原理上將的,並不利於菜鳥學習,所以我在這裡從動手方面將下openfire外掛的開發 1  這是我建立的目錄,請大家看清目錄結構 2  再次從包結構看下我建立的目錄結構   3  L

WebSphere MQ Java 應用開發簡單例項(上篇:客戶端模式開發)(client mode和binding mode)

1-背景知識 IBM MQ支援多種語言開發,本文主要是考慮Java應用開發,MQ提供了相關的Java類庫,可以很方便整合到Java應用中。 IBM MQ Java相關類庫允許Java應用直接與佇列管理器互動,或者連線MQ伺服器和客戶端進行互動。 類庫主要有

LinuxC/C++程式設計基礎(23) 使用thrift/rpc開發簡單例項(續1)

#include <vector> #include <boost/shared_ptr.hpp> #include <thrift/protocol/TBinaryProtocol.h> #include <thrift/server/TSimpleServer.h

安卓APP開發簡單例項 結對程式設計心得

開始說起搞APP開發,自己和小夥伴的程式設計水平真的很低,無從下手,只有在網上找點案列,學習著怎樣開發,結對程式設計還是面臨著許多問題的,大家的水平有所差異和程式設計風格不同,我們用eclipse做了一個仿微信登入的畫面的程式,算不上APP,其中程式碼的簽入,我和他兩個仔細

iReport-JasperReport報表開發:使用主Dataset的fields欄位作為sub dataset的sql引數

使用的是JasperReport + iReport 5.0 在main dataset和sub dataset中都可以設定sql語句,在其設定的sql語句中,可以使用其dataset內部的parameter的引數,main dataset中的引數很好獲得,因為在填充的時

php介面開發簡單例項

剛剛寫成人生第一個伺服器介面,總結分享一下經驗,沒寫過介面的可以看下 <?php include 'response.php'; $id = $_POST["user_id"]; if ($

iReport-JasperReport報表開發:使用JRDataSource填充含有SubDataset的報表

使用的是iReport +jasperReport  5.0,這裡主要以crosstab為例,在crosstab使用subdataset的情況下,使用JRDataSource進行填充的情況下的配置過程以及填充時需要注意的地方 在Java中使用JRDataSource填充含

ReportingServies——SQLServer報表開發綜合例項

文章目錄 如果我們安裝了sqlserver2008 R2,將會自動安裝一個報表開發工具 不要以為此報表開發工具只適合於sqlserver2008,其實在sqlserver2012中也是支援的,事實上我現在專案中就是使用的sqlserver2012。 使用此工具進行報

使用scala基於AKKA HTTP開發REST介面的簡單例項

一般情況下會使用SpringMVC開發REST介面,但是公司主開發語言是scala,因此採用AKKA HTTP(spray已經不再維護)來開發REST介面,具體可參看官網文件:AKKA HTTP 本文依據官網開發REST介面,具體如下: 開發環境:IDEA,MAVEN,SCALA

Struts2簡單例項開發

##Struts2簡單例項開發 1.下載struts2 2.建立專案,匯入struts2的jar包 3.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.j

javaweb學習總結—jsp簡單標籤標籤庫開發

一、JspFragment類介紹  javax.servlet.jsp.tagext.JspFragment類是在JSP2.0中定義的,它的例項物件代表JSP頁面中的一段符合JSP語法規範的JSP片段,這段JSP片段中不能包含JSP指令碼元素。  WEB容器在處理簡單標籤的標

Easyui,Echart,Jsp+Servlet開發簡單完整例項

做BI實施必須要掌握一定的開發技能,以處理整合報表系統;SDK開發;簡單的報表開發這些需求。在我參加的一個專案中需要製作一些簡單的列表,圖表。由於要求不能用報表工具,所以就只有用程式碼開發。太久沒做開發了,覺得J2EE都變成最熟悉的陌生人。努力複習了下結合開源的框架工具,

windows本地sparkstreaming開發環境搭建及簡單例項

windows本地spark開發環境搭建及簡單例項 1:開發環境IDEA選擇: IntelliJ IDEA Community Edition 2017.1.1  (相比eclipse更方便,不用裝那麼多外掛,且提供免費版,官網直接下載安裝就可以) 2:環境配置:(開發

VS2008中C#開發webservice簡單例項

1.建立工程 檔案-> 新建->網站 如下圖。   工程建好後,會自動新增如下程式碼: 1 using System; 2 using System.Linq; 3 using System.Web; 4 using System.Web.S

pythonocc入門指導:2.PyCharm連線pythonOCC開發環境,並執行一個簡單例項

已經更新的入門指導 PythonOCC入門指導:1.建立pythonocc虛擬環境 PythonOCC入門指導:2.執行一個簡單例項 PythonOCC入門指導:3.建立屬於自己的主介面及對話方塊及安裝qtdesigner pythonocc基礎使用:1.讀入iges,step,stl檔

spring Boot學習入門篇-idea開發簡單的hello world例項

原文:http://www.zuidaima.com/blog/3386443542367232.htm 最近學習spring Boot,用Idea寫了一個簡單的例項,分享給有需求的牛牛們. 1.idea建立一個完整的maven專案 專案完整結構: 2.開