前一段时间,我在工作中我使用了Apache的开源产品来进行图表,报表的打印工作。以下只是比较
实用的打印方式,其实,该产品中的doc对使用说得已经是很详细了。我之所以写这篇文章,是想和初
学者分享我的一点经验,避免大家少走弯路。
一.用cewolf实现图表打印;(注意刷新问题)
1.打印出柱状图;
该程序主要为两个步骤:
a.实现DatasetProducer接口;
b.在cewolf标签中调用该匿名类,添好相关属性;
以下为重要片断:
<%
ArrayList list = null;
Date[] dates=null;
list = (ArrayList)session.getAttribute(SessionNames.OPERATION_STAT);
PnrOperationLog operationLog = null;
PnrOperationLog[] operationLogs = null;
for (int i=0;i<list.size();i++){
operationLog = (PnrOperationLog)list.get(i);
operationLogs[i] = operationLog;
dates[i]=DateTimeFormatUtil.cnFormatToDate(operationLogs[i].getOperateDate());
%>
<tr>
<td align="center"><%=i+1%></td>
<td align="center"><%=operationLog.getOperateDate()%></td>
<td align="center"><%=operationLog.getOperateStat()%></td>
</tr>
<%}
final ArrayList listN=list;
final PnrOperationLog[] operationLogsN=operationLogs;
final Date[] datesN=dates;
if (pageContext.getAttribute("initFlag") == null) {
DatasetProducer timeData = new DatasetProducer() {
public Object produceDataset(Map params) {
TimeSeries ts = new TimeSeries("Cewolf Release Schedule", Month.class);
for (int i=0;i<listN.size();i++){
ts.add(new Month(datesN[i].getMonth(), datesN[i].getYear()), operationLogsN[i].getOperateStat());
}
return new TimeSeriesCollection(ts);
}
public String getProducerId() {
return "TimeDataProducer";
}
public boolean hasExpired(Map params, Date since) {
return false;//更据返回值false或true决定是否对其刷新;
}
};
pageContext.setAttribute("timeData", timeData);
}
%>
</table>
<table border=0>
<TR>
<TD>
colorpaint<BR>
<cewolf:chart id="timeChart" title="TimeSeries" type="timeseries">
<cewolf:colorpaint color="#EEEEFF"/>
<cewolf:data>
<cewolf:producer id="timeData"/>
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="timeChart" renderer="cewolf" width="300" height="300"/>
</TD>
</TR>
</TABLE>
<%}
catch (Exception e) {
e.printStackTrace();
}
%>
</body>
</html:html>
2.打印曲线图;
由于数据源不变,只需要调用cewolf的标签即可,如下:
<table border=0>
<TR>
<TD>
<cewolf:overlaidchart
id="test2"
title="曲线图"
type="overlaidxy"
xaxistype="date"
yaxistype="number"
xaxislabel="时间"
yaxislabel="统计量">
<cewolf:colorpaint color="#AAAAFFEE"/>
<cewolf:plot type="xyverticalbar">
<cewolf:data>
<cewolf:producer id="xy1" />
</cewolf:data>
</cewolf:plot>
</cewolf:overlaidchart>
<cewolf:img chartid="test2" renderer="/cewolf" width="500" height="300"/>
</TD>
</TR>
</TABLE>
3.其他类型的图,数据源不变,只需要调用cewolf相应的标签即可。
二.用iReport+jasperReport实现报表打印。
我们现在iReport中编辑报表的格式,这样生成了一个xml或jrxml文件(其实也是xml格式的),
编辑完毕后,编译会生成一个*.jasper文件。当然,也可以放在服务器端,在执行程序时,将
其编译,但这样会影响速度,好处是兼容性比较好。
实现报表打印有两方式:
a. 先生成报表,再将报表传送给客户端;
特点:开始时速度比较快,可是随着时间的变化,服务器端会有大量的冗余文件
某些浏览器不支持时,会出错。
b. 再服务器端不生成报表,在客户端动态生成报表传给客户端。
特点: 请求时处理量较大。
1.以pdf格式打印报表;
在iReport中选中已pdf格式打印的字体;
<%
File reportFile = applicant.getPath("/PDFReport/operationStatDisplay.jasper");
//定位编译后的jasper文件;
System.out.println(reportFile.getPath()+" ------This is the jasper file path.");
Map parameters = new HashMap();
PnrOperationLog operationLog = new PnrOperationLog();
parameters.put("ReportTitle", "订座操作量统计:"+operationType+"(按"+Type+"显示)"); //加上参数
JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(BookUtil.getObjectArrayFromArrayList(bList));
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, jrDataSource);
response.setContentType("application/pdf");
//response.setContentLength(bytes.length);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bytes,0,bytes.length);
outputStream.flush();
outputStream.close();
%>
2.以html格式打印报表;
注意图片的插入(JRHtmlExporterParameter.IMAGES_MAP);
翻页的处理(style='page-break-before:always;);
注意该方式不同于直接已html形式打印出报表。
JRBeanArrayDataSource jrDataSource = new JRBeanArrayDataSource(objects);//objects为要打印的实体数组;
JasperPrint jasperPrint =
JasperFillManager.fillReport(
reportFile.getPath(),
parameters,
jrDataSource
);
JRHtmlExporter exporter = new JRHtmlExporter();
Map imagesMap = new HashMap();
session.setAttribute("IMAGES_MAP", imagesMap);
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "/servlet/reports.Image?image=");
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "<br style='page-break-before:always;'>");
//exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE);
exporter.exportReport();
out.flush();
out.close();
%>
3.已其他形式打印出报表于以上类似,只是实现的接口或继承的类不同。
以上开源的产品真的不错,基本上要实现的功能都可以实现,版本有在完善中,他们的底层也是
jfree,iText等之类。
分享到:
相关推荐
在Winform应用中集成水晶报表打印功能,主要是通过设计报表、绑定数据、使用报表查看器和控制打印过程来实现的。水晶报表提供了丰富的设计工具和灵活的打印选项,使得即使非专业的报表设计人员也能创建出专业级的...
在VB(Visual Basic)开发环境中,报表打印是一项关键功能,尤其在企业级应用中,用于数据展示、分析和记录。本实例将深入探讨如何利用VB实现报表的打印,包括设计报表布局、设置打印选项以及调用打印过程。下面我们...
在VB 6.0(Visual Basic 6.0)中,数据库报表打印功能是一项关键的开发任务,尤其对于处理大量数据并需要定期更新和呈现的系统。本案例着重讲解如何利用VB 6.0实现数据库数据的动态刷新,并生成报表进行打印。下面将...
Labview报表打印功能是LabVIEW(Laboratory Virtual Instrument Engineering Workbench)编程环境中的一项重要功能,它允许用户在完成数据采集、分析或处理后,将结果以报表的形式展示并进行打印。这项功能对于实验...
### WinForm水晶报表打印知识点详解 #### 一、水晶报表简介 水晶报表(Crystal Reports)是一种功能强大的报表设计工具,广泛应用于.NET Framework平台上的应用程序开发中。它支持各种数据源,能够灵活地创建复杂的...
### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...
在IT领域,报表打印是一项重要的任务,特别是在企业管理、数据分析和决策支持中。VB,全称为Visual Basic,是Microsoft开发的一种可视化的编程环境,它广泛应用于Windows应用程序的开发,包括报表设计与打印功能。本...
这个名为“WPF图片、报表打印”的项目提供了一个基于VS2015和.NET Framework 4.0的示例,它展示了如何实现图片和报表的预览以及打印功能。以下是对该项目中涉及的关键知识点的详细解释: 1. **WPF基础知识**:WPF是...
### 开源报表打印组件JasperReports用法详解 #### JasperReports概述 JasperReports是一款功能强大的开源报表打印组件,属于开源代码组织SourceForge.net中的一个Java报表打印项目。它能够生成多种格式的报表,...
**RDLC报表打印控件详解** RDLC(Report Definition Language for Reporting Services)是Microsoft提供的一种报表定义语言,用于创建和设计交互式报表。它被广泛应用于.NET Framework的应用程序中,如ASP.NET或...
### JSP报表打印的一种简单解决方案 #### 背景与目的 在企业级应用开发中,经常需要将数据以报表的形式展示给用户,并提供打印功能。传统的报表打印方式往往涉及复杂的编程逻辑和技术栈,增加了项目的复杂性和维护...
在本文中,我们将深入探讨如何使用Visual Studio 2012 (VS2012) 开发工具,结合C#语言以及ReportViewer控件来实现报表打印的应用实例。这是一个非常实用的功能,尤其对于那些需要在应用程序中展示和打印数据的开发者...
这个“水晶报表打印二维码.zip”文件显然包含了关于如何使用水晶报表来生成和打印二维码以及CODE128和AN条形码的相关源码示例。以下是关于这些主题的详细解释: 1. **水晶报表**:水晶报表是由SAP公司开发的一款...
【VC报表打印预览源码】是一个专门为VC++开发者设计的工具,用于实现报表的打印和预览功能。这个程序提供了完整的源代码,方便开发者深入理解其内部工作原理,并可以根据实际需求进行定制和修改。在VC++环境中,报表...
【标题】"ASP.NET MVC + FastReport 开发的报表打印Demo.zip" 提供了一个使用ASP.NET MVC框架结合FastReport工具开发的报表打印示例。这个压缩包内容包含了从设计到实现报表打印的各个环节,旨在帮助开发者理解如何...
【超级报表打印控件】是一种专门用于在应用程序中生成、设计和打印复杂报表的专业工具。在IT领域,报表打印控件扮演着至关重要的角色,它能够帮助开发者创建出具有高度定制化、美观且数据丰富的报表,以满足业务需求...
在JavaWeb开发中,报表打印是一项关键任务,它涉及到数据的可视化展示以及用户对数据的交互。本方案宝典着重探讨了如何在JavaEE环境中高效地实现报表打印,旨在为开发者提供一系列实用的技术选择和最佳实践。以下是...
对于普通报表打印,关键在于如何正确地控制元素的显示、隐藏,以及调整打印样式以匹配报表的需要。随着技术的发展,未来的Web打印解决方案可能会更加依赖于前端框架和库,以提供更强大、更一致的跨浏览器打印体验。
标题中的“一个报表打印控件源码(VB)”指的是一个基于Visual Basic(VB)编程语言开发的用于报表打印功能的控件。这个控件可能是为了方便开发者在VB应用程序中实现复杂的报表设计和打印功能,例如从数据库提取数据、...
在IT行业中,报表打印是许多应用系统不可或缺的功能之一,特别是在数据管理和分析领域。本文将详细介绍一个基于C++的简单可扩展的报表打印类库,它主要用于处理文本和图像的打印需求。开发者可根据实际需要进一步...