`

生成pdf report 接口的封装与实现类.

阅读更多

以下是接口的封装:

/*
 * 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);
		}

 

分享到:
评论

相关推荐

    pdf生成源码

    `PDFReport.java`和`ReportHelper.java`的代码可能包含了如何解决这些问题的具体实现。为了更深入地理解这两个类的功能,你需要查看它们的源代码,了解类的结构、方法以及如何调用这些方法来生成PDF。通过学习这些...

    JasperReport 后台 代码 封装,采用JRDataSource方式

    在这个场景中,我们关注的是如何在后台通过代码封装来利用JRDataSource方式生成报表。 JRDataSource是JasperReport中的一个关键概念,它是将数据绑定到报表模板的一种方式。 首先,我们要理解JRDataSource的工作...

    JEE框架Spring详细简介..pdf

    例如,如果需要添加新的报告生成方式,如电子邮件报告,只需创建一个新的实现类,然后在Spring配置中声明即可。同时,日志记录可以通过AOP进行全局管理,无需在每个报告生成器中重复编写代码。 总结来说,Spring...

    jasperreports-fonts-6.3.0.7z_javareport_

    7. **与JavaReport的结合** 标签"javareport"表明该字体库主要服务于Java环境下的报表开发。在Java应用中,JasperReports通过Itext、Apache POI等库,结合字体库资源,生成高质量的报表。开发者可以充分利用Java的...

    Java程序设计.pdf

    本资源摘要信息是关于 Java 程序设计实训报告的知识点总结, Report 中包括编写四则运算游戏程序的设计和实现细节。 知识点一:Java Applet 小程序设计 * 了解 Java Applet 小程序的基本结构和组件,包括 Label、...

    C#版PDF阅读器

    这个阅读器利用了.NET框架中的GDI+图形设备接口来实现PDF文档的渲染和展示,从而提供流畅且快速的用户体验。 GDI+是微软Windows操作系统的一部分,它为开发者提供了丰富的图形处理功能,包括绘制线条、形状、文本...

    JasperReport与Java程序,导出不同格式的报表,包括pdf,excel,html,报表打印等功能

    5. **打印预览**:如果你想实现报表的打印预览,可以使用`JasperViewer.viewReport()`方法,它会打开一个窗口显示报表,用户可以选择打印。 在项目中,通常会把上述步骤封装到一个服务类中,以便在需要时调用。同时...

    Jsp中嵌入CrystalReport指南

    1. **了解报告源**:报告源是与特定报告实例相关的对象,它封装了有关报告的所有信息,包括数据源、参数设置等。 2. **创建报告源对象**:通过调用相应的API来创建报告源。例如,在Java中,可以使用`JRCReportSource...

    java编程教学.pdf

    封装是隐藏对象内部状态的实现细节,对外仅暴露必要的操作接口。在文档中,“class Field”和“new Field”暗示了类和对象的创建,这些是封装的基本元素。 5. 多态性(Polymorphism) “Polymorphism”这个词在文件...

    编程语言java编程教学.pdf

    封装是一种将数据(字段)和操作数据的代码(方法)捆绑在一起的编程机制,可以隐藏内部实现细节,提供公共接口。继承允许一个类从另一个类获得属性和方法,这可以提高代码复用性。多态允许类的不同对象对同一消息...

    笔记_金融项目第八天.pdf

    - **工具类**:将常用动作封装到utils工具类,方便复用。 5. **第三方接口测试**: - **BeautifulSoup**:用于解析HTML和XML,提取所需数据。 - **安装**:使用`pip install beautifulsoup4`安装第4版。 - **...

    FastReport.Net 扩展类( 2015.3.10)

    通过研究提供的"Demo"项目,我们可以深入了解如何利用这些扩展类来简化我们的报表开发工作,从而在项目中实现更快、更高效的报表生成。对于使用FastReport.Net的开发者来说,这是一个非常有价值的资源,值得深入学习...

    WinForm界面开发之酒店管理系统--开篇.pdf

    这些控件的封装和定制化工作是开发过程中的一大挑战,作者花费大量时间寻找合适且可复用的控件,尽管未能找到完全符合需求的现成解决方案,但最终还是通过自我封装实现了所需功能,展现了开发者的创造力和解决问题的...

    精典源码delphi源码下载 宾馆客房与洗浴管理系统.zip

    Delphi有集成的报表组件,如FastReport、ReportBuilder等,能够方便地设计和导出报表,支持PDF、Excel等多种格式。此外,系统还可能实现了打印预览和直接打印功能。 6. **权限与安全** 对于宾馆管理系统,权限控制...

    delphi实例_旅行社综合管理系统

    DELPHI有如FastReport、ReportBuilder等第三方组件,可以方便地生成复杂报表,并支持导出为PDF、Excel等格式。 7. **错误处理与日志记录**:为确保系统的稳定运行,开发者需考虑异常处理和日志记录。通过try-except...

    第10章 时间跟踪系统1.pdf

    - **业务逻辑层**:这一层封装了业务逻辑,通过对象模型将业务实体抽象出来,减少了表示层与数据访问层之间的耦合度,提高了系统的灵活性。 - **Category**:代表项目分类实体,用于区分不同类型的项目活动。 - **...

Global site tag (gtag.js) - Google Analytics