`

报表使用

阅读更多

目的:实现从前端到后台及生成报表的整个流程。

1.jsp页面

<%@page contentType="text/html; charset=UTF-8"%>
<%@ include file="/commons/taglibs.jsp"%>

<html>
	<head>

		<title>生成报表</title>
		<script language="JavaScript" type="text/JavaScript">		 
		function doPrintHTML(id)
		{
			window.open("${ctx}/expense/expTrack.do?method=doPrintHTML&id="+id);		
		}
		function doPrintPDF(id)
		{
			window.open("${ctx}/expense/expTrack.do?method=doPrintPDF&id="+id);		
		}
       </script>
	</head>
	<div align=center>
		<ec:table items="explist" var="exp"
			action="${ctx}/expense/expTrack.do"
			imagePath="${ctx}/widgets/extremecomponents/images/newHR/*.gif"
			retrieveRowsCallback="limit" view="newHr">
			<ec:row highlightClass="newHrECRowHighlightClass">
				<ec:column property="null" title="打印明细" sortable="false"
					viewsAllowed="newHr">
					<a href="javascript:doGetExpItem('${exp.id}');"
						style="TEXT-DECORATION: none"><img
							src="${ctx}/styles/newHR/images/detail2.gif" alt="明细html详情"
							border="0"> </a>

					<a href="javascript:doPrintPDF('${exp.id}');"
						style="TEXT-DECORATION: none"><img
							src="${ctx}/styles/newHR/images/print.gif" alt="明细PDF详情"
							border="0"> </a>

				</ec:column>
			</ec:row>
		</ec:table>
	</div>
	</div>
	</body>
</html>

 

2.Struts中action 中的代码编写

打印pdf的

public ActionForward doPrintPDF(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		
		try
		{						
			String empName = "name";
			Float totalAmountTemp =780;
						
			//数据转换
			DecimalFormat df = new DecimalFormat("0.00");			
			String totalAmount = df.format(totalAmountTemp);
			
			//数据转换-End
			
			String path = servlet.getServletContext().getRealPath("/");
			path = path + "report\\image\\logo.jpg";
			
			HashMap<String,String> parameters = new HashMap<String, String>();
			parameters.put("EMPLOYEE_NAME", empName);
			parameters.put("TOTAL_AMOUNT", totalAmount); 			
			parameters.put("IMG_PATH_LOGO", path);
			
			List<ItemsVO> resultList = itemsService.findItemByExp();
			
			expPrintService.showPDFPage(request, response, parameters, resultList, "PteExpend");
			
		}catch (BusinessException e) {
			saveDirectlyError(request,e.getMessage());
			log.error(e);
		} 
		catch (Exception e) {
			String message = "";
			saveDirectlyError(request,message);
			log.error(message+e);
		}
		
		return null;
	}

 

打印html

public ActionForward doPrintPDF(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		
		try
		{						
			String empName = "name";
			Float totalAmountTemp =780;
						
			//数据转换
			DecimalFormat df = new DecimalFormat("0.00");			
			String totalAmount = df.format(totalAmountTemp);
			
			//数据转换-End
			
			String path = servlet.getServletContext().getRealPath("/");
			path = path + "report\\image\\logo.jpg";
			
			HashMap<String,String> parameters = new HashMap<String, String>();
			parameters.put("EMPLOYEE_NAME", empName);
			parameters.put("TOTAL_AMOUNT", totalAmount); 			
			parameters.put("IMG_PATH_LOGO", path);
			
			List<ItemsVO> resultList = itemsService.findItemByExp();
			
			expPrintService.showHTMLPage(request, response, parameters, resultList, "PteExpend");
			
		}catch (BusinessException e) {
			saveDirectlyError(request,e.getMessage());
			log.error(e);
		} 
		catch (Exception e) {
			String message = "";
			saveDirectlyError(request,message);
			log.error(message+e);
		}
		
		return null;
	}

 

调用的子方法

@SuppressWarnings("deprecation")
	public void showPDFPage(HttpServletRequest request, HttpServletResponse response, 
			Map<String, String> parameters, List<?> resultList, String reportModuleName) throws IOException{
		
		try 
		{
			File reportFile = new File(request.getRealPath("/report/" + reportModuleName +".jasper"));
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(resultList);
			String reportFilePath = reportFile.getPath(); 
			JasperPrint jasperPrint;
			jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
			
			byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);
			
			//设置文件格式
			response.setContentType("application/pdf");
			response.setHeader("Content-disposition","attachment; filename="+reportModuleName+".pdf");
			//设置文件内容大小
			response.setContentLength(bytes.length);
			response.setCharacterEncoding("UTF-8");
			//获取输出流
			ServletOutputStream ouputStream = response.getOutputStream();
			//打印输出流
			ouputStream.write(bytes, 0, bytes.length);
			//刷新输出流
			ouputStream.flush();
			//关闭输出流
			ouputStream.close();
		} catch (JRException jre) {
			System.out.println("JRException:" + jre.getMessage());
			jre.printStackTrace();
		}
	}
	

 

html 子方法

@SuppressWarnings("deprecation")
	public void showHTMLPage(HttpServletRequest request, HttpServletResponse response, 
			Map<String, String> parameters, List<?> resultList, String reportModuleName) throws IOException
	{	
		try 
		{
			//页面格式编码设置
			response.setContentType("text/html;charset=UTF-8"); 
			
			//定义文件操作(读写)类
			PrintWriter out = response.getWriter(); 
			
			//根据报表文件的物理路径绘制报表文件
			File reportFile = new File(request.getRealPath("/report/"+reportModuleName+".jasper"));
			String reportFilePath = reportFile.getPath(); 
			
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(resultList);
			JasperPrint jasperPrint;
			
			jasperPrint = JasperFillManager.fillReport(reportFilePath, parameters, ds);
			
			/**JasperRunManager.runReportToHtmlFile(reportFilePath, parameters, conn); 生成静态HTML页面到*.jsper同目录文件下**/
			//JRXxxExporter:这是一系列的文件导出器,他们用于将*.jrprint 文件导出成对应格式的报表文件
			//使用JRHtmlExproter导出Html格式, Xls格式的导出器 JRXlsAbstractExport           
			JRHtmlExporter exporter = new JRHtmlExporter(); 
			
			//图片路径
			exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,request.getContextPath()+"\\report\\image\\"); 
			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.IS_USING_IMAGES_TO_ALIGN,Boolean.TRUE); 
			
			//导出
			exporter.exportReport(); 
			out.close(); 
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

把报表的模板生成好,放到相应的路径下就OK了。

分享到:
评论

相关推荐

    锐浪报表使用技巧.pdf

    下面将详细介绍锐浪报表使用中涉及的关键知识点。 首先,创建报表对象是使用锐浪报表的第一步。从提供的代码片段可以看出,通过`GridppReport`类实例化出报表对象,代码如下: ```java GridppReport Report = new ...

    水晶报表使用教程 报表

    【水晶报表使用教程 报表】是一份详细的教学资源,旨在帮助用户掌握如何有效地使用水晶报表(Crystal Reports)这一强大的报表设计工具。水晶报表是Business Objects公司开发的一款流行的企业级报表解决方案,它允许...

    用友UFO报表使用手册

    详细介绍用友UFO报表使用,从新建报表到公式调整,生成报表。

    润乾报表使用手册

    通过《润乾报表使用手册》的学习,可以系统掌握润乾报表的使用方法和开发过程,从而提高报表的开发效率。 首先,《润乾报表使用手册》适用于对报表业务有一定了解的用户,以及正在学习集算报表的使用者。手册的主要...

    用友U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计

    "用友U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计" 用友U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计是指在用友U8自定义报表中使用存储过程来生成报表,同时利用系统的分组和...

    用友手册资料:U9_Web_UFO报表使用指南.pdf

    用友手册资料:U9_Web_UFO报表使用指南.pdf 本手册为用友U9_Web_UFO报表使用指南,旨在指导用户如何使用Web-UFO报表工具设计和发布报表。 Web-UFO报表提供了在Web上展现基于财务指标函数取数的电子表格功能,并且还...

    U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计

    U8自定义报表使用存储过程时,使用系统的分组和小计、累计、合计

    水晶报表使用入门

    在这个“水晶报表使用入门”中,我们将深入探讨如何开始使用这个工具。 首先,安装和启动水晶报表。你需要下载并安装水晶报表的相应版本,如Business Objects Crystal Reports。安装完成后,可以通过桌面快捷方式或...

    润乾报表使用文档ppt

    本文档包含润乾报表使用的方法!介绍了润乾报表V4.0的下载网址及注意事项!按照本文档的操作,你就可以轻松学会报表的使用。

    U850自定义报表使用指南

    U850自定义报表使用指南,是在用友U8开发自定义报表的好帮手。

    SAP B1水晶报表使用指南

    ### SAP B1水晶报表使用指南知识点详述 #### 一、Crystal Reports 2008 SP3概述 **1.1 关于Crystal Reports** - **产品背景:** Crystal Reports 是一款广泛使用的商业智能(BI)工具,特别适用于中小型企业的报表...

    RDLC报表使用手册.pdf

    visual studio 自带的RDLC报表的使用技巧. 个人建议在做报表的时候尽量用自带的RDLC去代替水晶报表. 稳定性会好很多.

    webi报表使用文档

    【Web Intelligence 报表使用文档】是一份详细指导如何在 SAP BusinessObjects (BOE) 平台上使用 Web Intelligence (Webi) 开发和操作报表的中文文档。Web Intelligence 是一个强大的商务智能工具,允许用户创建、...

    水晶报表使用,里面有详细说明怎么做好报表

    本资源包含一个名为"水晶报表使用.wmv"的视频教程,将详细介绍如何在C#中有效地使用水晶报表。 首先,使用水晶报表的基本步骤包括:安装水晶报表SDK、创建新的报表项目以及引入水晶报表引用。在C#项目中,你需要...

    水晶报表使用学习文档

    【水晶报表使用学习文档】 水晶报表是一款强大的报表开发工具,广泛应用于各类管理系统的报表设计。在.NET环境下,水晶报表提供了简单易用的接口,能够帮助开发者轻松创建丰富多样的报表。以下是对使用水晶报表的...

    VC++水晶报表使用

    **VC++水晶报表使用详解** 水晶报表(Crystal Reports)是一款强大的报表设计工具,常用于Windows应用程序中,尤其在Visual C++开发环境中。本篇将深入探讨如何在VC++项目中集成并有效使用水晶报表,以及如何配合...

    reportViewer报表使用文档

    **ReportViewer报表使用详解** ReportViewer是Microsoft提供的一款强大的报表控件,主要应用于.NET Framework环境,支持C#等编程语言,能够帮助开发者轻松创建、展示和打印各种复杂的报表。本篇文档将详细介绍如何...

    RDLC报表使用手册

    ### RDLC报表使用手册知识点详解 #### 一、RDLC报表概述 **1.1 为何选择RDLC报表** 在.NET开发中,报表设计一直是重要的组成部分。过去,开发者可能会首选Crystal Report作为报表解决方案,尽管其功能强大且拥有...

    水晶报表使用详解

    【水晶报表使用详解】 水晶报表是一款强大的报表设计工具,广泛应用于C#.Net的WinForm和Asp.Net中,用于生成和展示各种复杂的业务报告。本文将详细介绍如何在开发环境中使用水晶报表,包括动态生成查询条件、处理...

Global site tag (gtag.js) - Google Analytics