以下是接口的封装:
/*
* 2010-10-01
*
*/
package com.rs.eservice.eleave.report.generator;
import java.io.ByteArrayOutputStream;
import java.sql.Connection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* Jasper Report Generator Interface.
* 接口的封装;
* @author Administrator
* @version $Revision: 1.1 $ $Date:
*/
public interface ReportGenerator {
public static final String EBRIPAPPLICATION_REPORT="pack/java/demo/report/MyFirstReport";
public ByteArrayOutputStream generatePdf(String jasperFilePath,
HashMap map, Connection conn, ResourceBundle bundle, Locale locale);
public ByteArrayOutputStream generatePdf(String jasperFilePath,
HashMap map, Collection beanCollection, ResourceBundle bundle,
Locale locale);
}
以下是实现类,实现ReportGenerator 接口;
/*
* Created on ${date}
*
* @(#)$$Id: ReportGeneratorImpl.java,v 1.1 */
package pack.java.demo.report.generatorimpl;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
import net.sf.jasperreports.engine.JRException;
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.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.fill.JRFillParameter;
/**
* Jasper Report Generator Implementation.
*
* @author Administration */
public class ReportGeneratorImpl implements ReportGenerator {
static final transient Log logger = new Log(ReportGeneratorImpl.class);
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Connection conn, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with db connection, jasper file: " + jasperFile);
final String endingMsg = "End generatePdf";
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
map.put(JRFillParameter.REPORT_LOCALE, locale);
if(bundle !=null){
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
}
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
logger.info("Compile jasper report");
JasperReport jreport = JasperCompileManager.compileReport(in);
jreport.setWhenNoDataType(JasperReport.WHEN_NO_DATA_TYPE_NO_PAGES);
logger.info("Fill jasper report");
JasperPrint print = JasperFillManager.fillReport(jreport, map, conn);
logger.info("Export report to PDF stream");
JasperExportManager.exportReportToPdfStream(print, out);
} catch (Exception e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
logger.info("Close database connection");
conn.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
logger.info(endingMsg);
}
return out;
}
public ByteArrayOutputStream generatePdf(String jasperFile, HashMap map,
Collection beanCollection, ResourceBundle bundle, Locale locale) {
logger.info("Start generatePdf with bean collection, jasper file: " + jasperFile);
final String endingMsg = "End generatePdf";
ByteArrayOutputStream out = new ByteArrayOutputStream();
if (map == null)
map = new HashMap();
if (locale != null)
map.put(JRFillParameter.REPORT_LOCALE, locale);
map.put(JRFillParameter.REPORT_RESOURCE_BUNDLE, bundle);
InputStream in = ReportGeneratorImpl.class.getClassLoader()
.getResourceAsStream(jasperFile + ".jrxml");
try {
logger.info("Compile Jasper report");
JasperReport jreport = JasperCompileManager.compileReport(in);
jreport.setWhenNoDataType(JasperReport.WHEN_NO_DATA_TYPE_NO_PAGES);
logger.info("Fill Jasper report");
JasperPrint print = JasperFillManager.fillReport(jreport, map,
new JRBeanCollectionDataSource(beanCollection));
logger.info("Export report to PDF stream");
JasperExportManager.exportReportToPdfStream(print, out);
} catch (JRException e) {
logger.logExceptionCaught(e);
} finally {
try {
logger.info("Close input stream");
in.close();
} catch (Exception e) {
logger.logExceptionCaught(e);
}
logger.info(endingMsg);
}
return out;
}
}
页面直接调用.生成:
HashMap map = new HashMap();
map.put("SUBREPORT_DIR","com/rs/eservice/eleave/"); //指定存放子报表的路径..
map.put("StuName".sttName); //参数.
ReportGenerator generator = (ReportGenerator) EServiceBeanFactory.getBean(ReportGenerator.BEAN_NAME);
ByteArrayOutputStream baos = generator.generatePdf("pack/java/demo/report/StudentReport", map,calendarReport,ResourceBundle.getBundle(
ReportGeneratorImpl.LEAVE_BALANCE_REPORT, Locale.US,
ReportGenerator.class.getClassLoader()),null);
try {
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
response.setContentType("application/pdf");
response.setContentLength(baos.size());
ServletOutputStream out = response.getOutputStream();
baos.writeTo(out);
out.flush();
out.close();
baos.close();
} catch (IOException e) {
logger.error("Exception caught: ", e);
ActionError err = null;
if (e.getCause() instanceof DatabaseException) {
err = new ActionError("sysmain.error.databaseException");
} else {
err = new ActionError("sysmain.error.unknownException");
}
errors.add(ActionErrors.GLOBAL_MESSAGE, err);
}
分享到:
相关推荐
`PDFReport.java`和`ReportHelper.java`的代码可能包含了如何解决这些问题的具体实现。为了更深入地理解这两个类的功能,你需要查看它们的源代码,了解类的结构、方法以及如何调用这些方法来生成PDF。通过学习这些...
在这个场景中,我们关注的是如何在后台通过代码封装来利用JRDataSource方式生成报表。 JRDataSource是JasperReport中的一个关键概念,它是将数据绑定到报表模板的一种方式。 首先,我们要理解JRDataSource的工作...
例如,如果需要添加新的报告生成方式,如电子邮件报告,只需创建一个新的实现类,然后在Spring配置中声明即可。同时,日志记录可以通过AOP进行全局管理,无需在每个报告生成器中重复编写代码。 总结来说,Spring...
7. **与JavaReport的结合** 标签"javareport"表明该字体库主要服务于Java环境下的报表开发。在Java应用中,JasperReports通过Itext、Apache POI等库,结合字体库资源,生成高质量的报表。开发者可以充分利用Java的...
本资源摘要信息是关于 Java 程序设计实训报告的知识点总结, Report 中包括编写四则运算游戏程序的设计和实现细节。 知识点一:Java Applet 小程序设计 * 了解 Java Applet 小程序的基本结构和组件,包括 Label、...
这个阅读器利用了.NET框架中的GDI+图形设备接口来实现PDF文档的渲染和展示,从而提供流畅且快速的用户体验。 GDI+是微软Windows操作系统的一部分,它为开发者提供了丰富的图形处理功能,包括绘制线条、形状、文本...
### ABAP入门必看资料.pdf 知识点详解 #### 一、基础知识 **1. 什么是ABAP?** - **定义与历史**: ABAP(Advanced Business Application Programming)是一种专为SAP系统的开发而设计的高级编程语言。起初,ABAP被...
5. **打印预览**:如果你想实现报表的打印预览,可以使用`JasperViewer.viewReport()`方法,它会打开一个窗口显示报表,用户可以选择打印。 在项目中,通常会把上述步骤封装到一个服务类中,以便在需要时调用。同时...
1. **了解报告源**:报告源是与特定报告实例相关的对象,它封装了有关报告的所有信息,包括数据源、参数设置等。 2. **创建报告源对象**:通过调用相应的API来创建报告源。例如,在Java中,可以使用`JRCReportSource...
封装是隐藏对象内部状态的实现细节,对外仅暴露必要的操作接口。在文档中,“class Field”和“new Field”暗示了类和对象的创建,这些是封装的基本元素。 5. 多态性(Polymorphism) “Polymorphism”这个词在文件...
封装是一种将数据(字段)和操作数据的代码(方法)捆绑在一起的编程机制,可以隐藏内部实现细节,提供公共接口。继承允许一个类从另一个类获得属性和方法,这可以提高代码复用性。多态允许类的不同对象对同一消息...
- **工具类**:将常用动作封装到utils工具类,方便复用。 5. **第三方接口测试**: - **BeautifulSoup**:用于解析HTML和XML,提取所需数据。 - **安装**:使用`pip install beautifulsoup4`安装第4版。 - **...
通过研究提供的"Demo"项目,我们可以深入了解如何利用这些扩展类来简化我们的报表开发工作,从而在项目中实现更快、更高效的报表生成。对于使用FastReport.Net的开发者来说,这是一个非常有价值的资源,值得深入学习...
这些控件的封装和定制化工作是开发过程中的一大挑战,作者花费大量时间寻找合适且可复用的控件,尽管未能找到完全符合需求的现成解决方案,但最终还是通过自我封装实现了所需功能,展现了开发者的创造力和解决问题的...
Delphi有集成的报表组件,如FastReport、ReportBuilder等,能够方便地设计和导出报表,支持PDF、Excel等多种格式。此外,系统还可能实现了打印预览和直接打印功能。 6. **权限与安全** 对于宾馆管理系统,权限控制...
DELPHI有如FastReport、ReportBuilder等第三方组件,可以方便地生成复杂报表,并支持导出为PDF、Excel等格式。 7. **错误处理与日志记录**:为确保系统的稳定运行,开发者需考虑异常处理和日志记录。通过try-except...
- **业务逻辑层**:这一层封装了业务逻辑,通过对象模型将业务实体抽象出来,减少了表示层与数据访问层之间的耦合度,提高了系统的灵活性。 - **Category**:代表项目分类实体,用于区分不同类型的项目活动。 - **...