sperReports例子代码
代码例子:
设置编译的类库和表格文件存放目录:
JRProperties.setProperty(JRProperties.COMPILER_CLASSPATH, context.getRealPath("/WEB-INF/lib/jasperreports-1.2.0.jar")
???+ System.getProperty("path.separator")
???+ context.getRealPath("/WEB-INF/classes/"));
JRProperties.setProperty(JRProperties.COMPILER_TEMP_DIR, context.getRealPath("/reports/"));
或者是直接使用:
JasperCompileManager.compileReportToFile(context.getRealPath("/reports/WebappReport.jrxml"));
HTML Export:
File reportFile = new File(context.getRealPath("/reports/WebappReport.jasper"));
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getPath());
或直接使用JasperReport的XML文件
JasperReport jasperReport = JasperCompileManager.compileReport(context.getRealPath("/reports/WebappReport.jrxml"));
设置输入的一些参数
Map parameters = new HashMap();
填充报表
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new WebappDataSourceList());
导出HTML格式:
JRHtmlExporter exporter = new JRHtmlExporter();
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);--使用报表(JasperPrint)
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);--输出到流
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image?image=");
exporter.exportReport();
PDF Export:
bytes = JasperExportManager.exportReportToPdf(jasperPrint);?
response.setHeader("Content-Disposition","attachment;filename=JasperPDF.pdf");
// 设置页面的输出格式
response.setHeader("Content-Type", "application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
XLS Export:
ServletOutputStream outs = response.getOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,reportFile + xlsFileName); --输出到文件
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outs);--输出到流
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);--每页使用一个SHEET
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);--移除空白
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);--背景色
exporter.exportReport();
主从报表:
ServletOutputStream out = response.getOutputStream();
JasperReport subReport = JasperCompileManager.compileReport(context.getRealPath("/reports/child.jrxml"));
JasperReport fatherReport = JasperCompileManager.compileReport(context.getRealPath("/reports/father.jrxml"));--定义主报表样式
Map parameters = new HashMap();
ArrayList listf = new ArrayList();--主报表的数据
ArrayList listc = new ArrayList();--子报表的数据
??
parameters.put("Title", "SubReport");
parameters.put("SubReportMap", new JRBeanCollectionDataSource(listc));--子报表的数据
parameters.put("ChildReport", subReport);
JasperPrint jasperPrint = JasperFillManager.fillReport(fatherReport,parameters, new JRBeanCollectionDataSource(listf));
?
JRHtmlExporter exporter = new JRHtmlExporter();
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image?image=");
exporter.exportReport();
子报表如何得到输入的参数:
首先是将参数传入到主报表中,再在主报表中将相应的参数传给子报表。因为在主报表中定义子报表时可以定义参数给子报表。
并且要将相应的表格样式文件传给子报表:
使用方法:
(1)net.sf.jasperreports.engine.JasperReport。
JasperReport subReport = JasperCompileManager.compileReport(context.getRealPath("/reports/child.jrxml"));
parameters.put("ChildReport", subReport);
(2)在样式中直接使用文件得到子报表的样式。
相关的定义:
1.参数
参数是传入到报表填充操作的对象引用
参数可的构造SQL查询
2.数据源
JasperReports使用一个叫JRDataSource的接口来支持各种类型的数据源
3.字段
报表字段代表从数据源映射数据到报表产生程序的唯一途径
4.表达式
表达式是JasperReports的强大特点,它们可被声明的报表变量使用来执行各种计算。
5.变量
报表变量是才一个表达式开始时建立的特殊的对象。
变量可以在相应的表达式中执行内置类型的计算,如:count,sum,average,lowest,highest等
6.报表区
当我们建立一个报表设计时,我们需要定义报表区的内容和布局。报表设计的整个结构基于以下报表区<title>, <pageHeader>, <columnHeader>, <groupHeader>, <detail>, <groupFooter>, <columnFoter>, <pageFooter>, <summary>.
7.组
组代表了在报表上组织数据的一个灵活的方式,当我们填充一个报表时,JasperReports引擎可字段检测组表达式<groupFooter> 和 <groupHeader>等是否完整。
8.字体和Unicode支持
你可以用任何语言来创建你的报表。
9. Scriptlets
Scriptlets是java代码序列,在每次报表事件发生时被执行。通过 scriptlets,用户可以影响被报表变量存储的值。
当我们创建一个JasperReports scriptlet类时,开发者要实现或重载几个方法,象:beforeReportInit(), afterReportInit(), beforePageInit(), afterPageInit(), beforeGroupInit(), afterGroupInit()等,这些方法当填充报表时在适当的时候被报表引擎调用。
10.子报表
子报表是报表产生工具的重要特征,它允许更复杂报表的创建并简化设计工作。
子报表在创建主从报表时非常有用。
附:
- public String printResumeToPDF() throws Exception {
- String jrxmlPath = getServletContext().getRealPath(
- "/jasper/sovoResume.jrxml");
- List resumeInfo = getServMgr().getUserService().getResumeForDataSource(
- getLoginUserId());
- Map<String, String> parameters = new HashMap<String, String>();
- parameters.put("SUBREPORT_DIR", getServletContext().getRealPath(
- "/jasper"));
- JRDataSource dataSource = new JRBeanCollectionDataSource(resumeInfo);
- JasperReport report = JasperCompileManager.compileReport(jrxmlPath);
- JasperPrint jasperPrint = JasperFillManager.fillReport(report,
- parameters, dataSource);
- HttpServletResponse response = ServletActionContext.getResponse();
- OutputStream ouputStream = response.getOutputStream();
- // 设置相应参数,以附件形式保存PDF
- response.setContentType("application/pdf");
- response.setCharacterEncoding("UTF-8");
- response.setHeader("Content-Disposition", "attachment; filename=\""
- + URLEncoder.encode(getLoginUserRealName() + "的个人简历", "UTF-8")
- + ".pdf\"");
- // 使用JRPdfExproter导出器导出pdf
- JRPdfExporter exporter = new JRPdfExporter();
- exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
- exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
- exporter.exportReport();// 导出
- ouputStream.close();// 关闭流
- return null;
- }