自定义报表概要设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自定义报表概要设计
自定义报表概要设计 (1)
1. 编写目的 (2)
2. 定义 (2)
2.1 JXDataSource (2)
3. 总体设计 (3)
3.1 需求规定 (3)
3.1.1 获取报表配置文件 (3)
3.1.2 解析配置文件及模板 (3)
3.2 运行环境 (4)
3.3 处理流程 (4)
3.4 未解决问题 (4)
4. 接口设计 (4)
4.1 用户接口 (5)
4.1.1 获取PDF结果 (5)
4.1.2 获取excel结果 (6)
4.1.3 获取Html结果 (6)
4.1.4 获取XML结果 (7)
4.1.5 获取纯文本结果 (7)
4.2 内部接口 (8)
4.2.1 获取JasperReport对象 (8)
4.2.2 获取JasperPrint对象 (9)
1. 编写目的
a、规范jasperreport报表工具整合方式
b、定义通用报表工具接口
2. 定义
2.1 JXDataSource
该类需要实现接口JRDataSource,用来为设计好的报表提供数据源,该类有以下几个要求:
a、定义List<?> data, int index, int max三个成员变量,data为数据列表,index为数据索引,max为最大数据集
b、定义带参数构造方法,参数为List<?> list,构造方法内部用list给成员变量赋值,并用list.size()给成员变量max赋值,用-1给成员变量index赋值
c、实现next()方法,将index加一然后和max比较大小,只要比max小,都返回true,否则返回false,以便遍历整个data
d、实现getFieldValue(JRField field)方法。
取出index索引所在的对象obj,返回obj中,名为field.getName()的字段的值。
核心代码:
Object obj = data.get(index);
Field f = obj.getClass().getDeclaredField(arg0.getName());
return JXFieldUtil.getFieldValue(f, obj);
3. 总体设计
3.1 需求规定
3.1.1 获取报表配置文件
a、定义配置文件放置路径:在web.xml中定义配置文件的根目录,在系统启动时,初始化到全局对象中,从而方便后面使用。
b、定义通用配置文件获取方法:定义通用的配置文件获取方式,对获取失败、文件不可读等异常信息进行处理。
3.1.2 解析配置文件及模板
解析jasperreport配置模板,并从数据源中获取报表数据,组装成报表后,按指定格式返回给用户。
至少需要支持PDF、Excel、HTML、XML、纯文本五种格式。
其中HTML直接将结果写入response,方便用户前台浏览。
其他几种格式写入服务器文件,并返回文件路径,方便用户下载使用。
3.2 运行环境
1、作为其它工程的类库,由其它需要使用报表自定义功能的J2EE项目进行调用。
使用JDK1.6以上
2、设计报表请选择javabean做数据源
3.3 处理流程
a、调用:根据用户的选择,调用不同的接口,从而进行不同报表格式的处理。
b、根据业务拼装参数及加载数据集。
c、获取jasperreport报表配置文件,,并进行报表的数据填充。
d、将填充好的报表返回给用户。
HTML格式直接返回HTML页面,方便用户预览,其他格式,先将报表缓存到服务器,然后返回文件路径,以供用户下载使用。
3.4 未解决问题
a、用户自定义报表模板
b、如何动态传递参数,进行带条件的查询报表
c、网页预览时,背景图片不能正常显示
4. 接口设计
4.1 用户接口
4.1.1 获取PDF结果
loadPDFReport(HttpServletResponse response, String configFile, Map<String, Object> params, List<?> data, String fileName):获取PDF格式的报表,先解析报表为PDF文件,并存放到服务器的临时文件夹中,然后返回文件路径,以供用户下载使用。
此方法要求先根据业务需求组装参数,及数据结果集,然后设置response的返回类型及数据。
参数:
response : HttpServletResonse对象,用来向浏览器返回内容
configFile : 所对应的jasperreport模板名称,该文件已经放入了指定的文件夹内
params :生成报表需要的参数,以map形式传入
data :数据结果集
fileName : 返回文件名称
关键代码:
JasperReport jr = loadJasperReport(configFile);
JXDataSource ds = new JXDataSource(data);
JasperPrint jp = loadJasperPrint(jr, params, ds);
OutputStream out = response.getOutputStream();
response.setContentType(""application/pdf;charset=ISO8859-1"");
response.setHeader(""Content-Disposition"", ""attachment;filename=\"""" + new String(fileName.getBytes(), ""ISO8859-1"") + ""\"""");
JRPdfExporter pdf = new JRPdfExporter();
pdf.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
pdf.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
pdf.exportReport();
4.1.2 获取excel结果
loadExcelReport(HttpServletResponse response, String configFile, Map<String, Object> params, List<?> data, String fileName):获取Excel格式的报表,先解析报表为Excel文件,并存放到服务器的临时文件夹中,然后返回文件路径,以供用户下载使用。
此方法要求先根据业务需求组装参数,及数据结果集,然后设置response的返回类型及数据。
参数:
response : HttpServletResonse对象,用来向浏览器返回内容
configFile : 所对应的jasperreport模板名称,该文件已经放入了指定的文件夹内
params :生成报表需要的参数,以map形式传入
data :数据结果集
fileName : 返回文件名称
关键代码:
JasperReport jr = loadJasperReport(configFile);
JXDataSource ds = new JXDataSource(data);
JasperPrint jp = loadJasperPrint(jr, params, ds);
OutputStream out = response.getOutputStream();
response.setContentType(""application/vnd.ms-excel;charset=ISO8859-1"");
response.setHeader(""Content-Disposition"", ""attachment;filename=\"""" + new String(fileName.getBytes(), ""ISO8859-1"") + ""\"""");
JExcelApiExporter excel = new JExcelApiExporter();
excel.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
excel.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
excel.exportReport();
4.1.3 获取Html结果
loadTXTReport(HttpServletResponse response, String configFile, Map<String, Object> params, List<?> data, String fileName):获取TXT格式的报表,先解析报表为TXT文件,并存放到服务器的临时文件夹中,然后返回文件路径,以供用户下载使用。
此方法要求先根据业务需求组装参数,及数据结果集,然后设置response的返回类型及数据。
参数:
response : HttpServletResonse对象,用来向浏览器返回内容
configFile : 所对应的jasperreport模板名称,该文件已经放入了指定的文件夹内
params :生成报表需要的参数,以map形式传入
data :数据结果集
fileName : 返回文件名称
关键代码:
JasperReport jr = loadJasperReport(configFile);
JXDataSource ds = new JXDataSource(data);
JasperPrint jp = loadJasperPrint(jr, params, ds);
OutputStream out = response.getOutputStream();
response.setContentType(""text/plain;charset=utf-8"");
JRHtmlExporter html = new JRHtmlExporter();
html.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
html.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
html.exportReport();
4.1.4 获取XML结果
loadXMLReport(HttpServletResponse response, String configFile, Map<String, Object> params, List<?> data, String fileName):获取XML格式的报表,先解析报表为XML文件,并存放到服务器的临时文件夹中,然后返回文件路径,以供用户下载使用。
此方法要求先根据业务需求组装参数,及数据结果集,然后设置response的返回类型及数据。
参数:
response : HttpServletResonse对象,用来向浏览器返回内容
configFile : 所对应的jasperreport模板名称,该文件已经放入了指定的文件夹内
params :生成报表需要的参数,以map形式传入
data :数据结果集
fileName : 返回文件名称
关键代码:
JasperReport jr = loadJasperReport(configFile);
JXDataSource ds = new JXDataSource(data);
JasperPrint jp = loadJasperPrint(jr, params, ds);
OutputStream out = response.getOutputStream();
response.setContentType(""text/xml;charset=utf-8"");
JRXmlExporter excel = new JRXmlExporter();
xml.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
xml.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
xml.exportReport();
4.1.5 获取纯文本结果
loadTXTReport(HttpServletResponse response, String configFile, Map<String, Object> params, List<?> data, String fileName):获取TXT格式的报表,先解析报表为TXT文件,并存放到服务器的临时文件夹中,然后返回文件路径,以供用户下载使用。
此方法要求先根据业务需求组装参数,及数据结果集,然后设置response的返回类型及数据。
参数:
response : HttpServletResonse对象,用来向浏览器返回内容
configFile : 所对应的jasperreport模板名称,该文件已经放入了指定的文件夹内
params :生成报表需要的参数,以map形式传入
data :数据结果集
fileName : 返回文件名称
关键代码:
JasperReport jr = loadJasperReport(configFile);
JXDataSource ds = new JXDataSource(data);
JasperPrint jp = loadJasperPrint(jr, params, ds);
OutputStream out = response.getOutputStream();
response.setContentType(""text/plain;charset=utf-8"");
JRTextExporter text = new JRTextExporter();
text.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
text.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
text.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, 200);
text.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, 200);
text.exportReport();
4.2 内部接口
4.2.1 获取JasperReport对象
loadJasperReport(String fileName):获取jasperreport的配置对象,可能抛出JRException或者FileNotFoundException。
参数:
fileName : jasperreport报表配置文件名称
关键代码:
File file = new File(fileName);
JasperReport report = (JasperReport) JRLoader.loadObject(file);
4.2.2 获取JasperPrint对象
loadJasperPrint(JasperReport report, Map<String, Object> map, JXDataSource data):此方法主要完成,利用报表模板、参数,从指定数据源获取数据,并完成报表填充。
返回JasperPrint对象,该对象包含了已经填充好的报表。
可以利用该对象导出各种格式的报表。
将会抛出JRException异常。
参数
report :报表模型对象
map :查询报表时需要的参数
data :数据源
核心代码:
JasperPrint jp = JasperFillManager.fillReport(report, params, data);。