在网上搜索了很多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:
<?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" >
<style name="pageHeader" forecolor="#FFFFFF" backcolor="#333333"/>
<parameter name="userName" class="java.lang.String"/>
<!-- $P{}为填充参数,$V{}为值 ,$F{}为查询值-->
<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="260" 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="200" height="15"/>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement positionType="Float" x="260" y="4" width="255" 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>
package servlets;
import java.io.File;
import java.io.IOException;
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.JRExporterParameter;
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.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 导出管理器
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);
<span style="white-space:pre"> </span>JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map,JDBC.conn);
<span style="white-space:pre"> </span>//生成html
<span style="white-space:pre"> </span>JRHtmlExporter html = new JRHtmlExporter();
<span style="white-space:pre"> </span>html.setParameter(JRHtmlExporterParameter.JASPER_PRINT, jasperPrint);
<span style="white-space:pre"> </span>html.setParameter(JRHtmlExporterParameter.OUTPUT_WRITER,response.getWriter());
<span style="white-space:pre"> </span>html.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
<span style="white-space:pre"> </span>html.setParameter(JRExporterParameter.CHARACTER_ENCODING, "utf-8");
<span style="white-space:pre"> </span>html.exportReport();
<span style="white-space:pre"> </span>//生成excel
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span>JRXlsExporter xls=new JRXlsExporter();
<span style="white-space:pre"> </span>xls.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
<span style="white-space:pre"> </span>xls.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, response.getOutputStream());
<span style="white-space:pre"> </span>xls.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE);
<span style="white-space:pre"> </span>xls.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
<span style="white-space:pre"> </span>response.setHeader("Content-Disposition", "attachment;filename=first.xls");
<span style="white-space:pre"> </span>response.setContentType("application/vnd_ms-excel");
<span style="white-space:pre"> </span>xls.exportReport();
<span style="white-space:pre"> </span>*/
<span style="white-space:pre"> </span>//生成pdf
<span style="white-space:pre"> </span>/*
<span style="white-space:pre"> </span>JRPdfExporter pdf = new JRPdfExporter();
<span style="white-space:pre"> </span>pdf.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
<span style="white-space:pre"> </span>pdf.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
<span style="white-space:pre"> </span>response.setHeader("Content-Disposition", "attachment;filename=first.pdf");
<span style="white-space:pre"> </span>response.setContentType("application/pdf");
<span style="white-space:pre"> </span>response.setCharacterEncoding("UTF-8");
<span style="white-space:pre"> </span>pdf.exportReport();
*/
}catch(Exception e){
e.printStackTrace();
}
}
}
</span>执行效果:html数据
页面的样式是可以通过jrxml文件的配置的,手写肯定不太好看,iReport是jasperReport的可视化工具,可以下载 iReport工具来设计。
上面代码保存之后,代码前面可能会多出<span>标签
原文:http://blog.csdn.net/xiaosheng_papa/article/details/44237251