javaWeb+JasperReport报表开发简单实例

本文提供了一套完整的JasperReport报表开发流程,包括代码实现、项目结构搭建、参数设置、数据源配置及执行效果展示,旨在帮助初学者直观理解报表开发过程并快速上手。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网上搜索了很多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(放入进去之后会出现蚂蚁图标);



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", "111@qq.com");
		map1.put("qq", "111");
		
		Map map2=new HashMap();
		map2.put("id", 2);
		map2.put("name", "bbb");
		map2.put("email", "222@qq.com");
		map2.put("qq", "222");
		
		Map map3=new HashMap();
		map3.put("id", 3);
		map3.put("name", "ccc");
		map3.put("email", "333@qq.com");
		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>标签




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值