`

报表打印

阅读更多
前一段时间,我在工作中我使用了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中 水晶报表打印功能

    在Winform应用中集成水晶报表打印功能,主要是通过设计报表、绑定数据、使用报表查看器和控制打印过程来实现的。水晶报表提供了丰富的设计工具和灵活的打印选项,使得即使非专业的报表设计人员也能创建出专业级的...

    VB报表打印实例 VB报表打印

    在VB(Visual Basic)开发环境中,报表打印是一项关键功能,尤其在企业级应用中,用于数据展示、分析和记录。本实例将深入探讨如何利用VB实现报表的打印,包括设计报表布局、设置打印选项以及调用打印过程。下面我们...

    VB数据库报表打印功能案例

    在VB 6.0(Visual Basic 6.0)中,数据库报表打印功能是一项关键的开发任务,尤其对于处理大量数据并需要定期更新和呈现的系统。本案例着重讲解如何利用VB 6.0实现数据库数据的动态刷新,并生成报表进行打印。下面将...

    Labview报表打印功能

    Labview报表打印功能是LabVIEW(Laboratory Virtual Instrument Engineering Workbench)编程环境中的一项重要功能,它允许用户在完成数据采集、分析或处理后,将结果以报表的形式展示并进行打印。这项功能对于实验...

    winform 水晶报表打印,无预览

    ### WinForm水晶报表打印知识点详解 #### 一、水晶报表简介 水晶报表(Crystal Reports)是一种功能强大的报表设计工具,广泛应用于.NET Framework平台上的应用程序开发中。它支持各种数据源,能够灵活地创建复杂的...

    Java实现Web报表打印功能.

    ### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...

    报表打印+VB报表打印+VB

    在IT领域,报表打印是一项重要的任务,特别是在企业管理、数据分析和决策支持中。VB,全称为Visual Basic,是Microsoft开发的一种可视化的编程环境,它广泛应用于Windows应用程序的开发,包括报表设计与打印功能。本...

    WPF图片、报表打印

    这个名为“WPF图片、报表打印”的项目提供了一个基于VS2015和.NET Framework 4.0的示例,它展示了如何实现图片和报表的预览以及打印功能。以下是对该项目中涉及的关键知识点的详细解释: 1. **WPF基础知识**:WPF是...

    开源报表打印组件JasperReports用法详解

    ### 开源报表打印组件JasperReports用法详解 #### JasperReports概述 JasperReports是一款功能强大的开源报表打印组件,属于开源代码组织SourceForge.net中的一个Java报表打印项目。它能够生成多种格式的报表,...

    rdlc报表打印控件

    **RDLC报表打印控件详解** RDLC(Report Definition Language for Reporting Services)是Microsoft提供的一种报表定义语言,用于创建和设计交互式报表。它被广泛应用于.NET Framework的应用程序中,如ASP.NET或...

    JSP报表打印的一种简单解决方案

    ### JSP报表打印的一种简单解决方案 #### 背景与目的 在企业级应用开发中,经常需要将数据以报表的形式展示给用户,并提供打印功能。传统的报表打印方式往往涉及复杂的编程逻辑和技术栈,增加了项目的复杂性和维护...

    VS2012开发工具C#语言 ReportViewer报表打印应用实例(含资料链接)

    在本文中,我们将深入探讨如何使用Visual Studio 2012 (VS2012) 开发工具,结合C#语言以及ReportViewer控件来实现报表打印的应用实例。这是一个非常实用的功能,尤其对于那些需要在应用程序中展示和打印数据的开发者...

    水晶报表打印二维码.zip

    这个“水晶报表打印二维码.zip”文件显然包含了关于如何使用水晶报表来生成和打印二维码以及CODE128和AN条形码的相关源码示例。以下是关于这些主题的详细解释: 1. **水晶报表**:水晶报表是由SAP公司开发的一款...

    VC报表打印预览源码

    【VC报表打印预览源码】是一个专门为VC++开发者设计的工具,用于实现报表的打印和预览功能。这个程序提供了完整的源代码,方便开发者深入理解其内部工作原理,并可以根据实际需求进行定制和修改。在VC++环境中,报表...

    ASP.NET MVC + FastReport 开发的报表打印Demo.zip

    【标题】"ASP.NET MVC + FastReport 开发的报表打印Demo.zip" 提供了一个使用ASP.NET MVC框架结合FastReport工具开发的报表打印示例。这个压缩包内容包含了从设计到实现报表打印的各个环节,旨在帮助开发者理解如何...

    超级报表打印控件

    【超级报表打印控件】是一种专门用于在应用程序中生成、设计和打印复杂报表的专业工具。在IT领域,报表打印控件扮演着至关重要的角色,它能够帮助开发者创建出具有高度定制化、美观且数据丰富的报表,以满足业务需求...

    JavaWeb开发技术方案宝典--报表打印方案(报表打印方案要点代码)

    在JavaWeb开发中,报表打印是一项关键任务,它涉及到数据的可视化展示以及用户对数据的交互。本方案宝典着重探讨了如何在JavaEE环境中高效地实现报表打印,旨在为开发者提供一系列实用的技术选择和最佳实践。以下是...

    Web打印的解决方案之普通报表打印

    对于普通报表打印,关键在于如何正确地控制元素的显示、隐藏,以及调整打印样式以匹配报表的需要。随着技术的发展,未来的Web打印解决方案可能会更加依赖于前端框架和库,以提供更强大、更一致的跨浏览器打印体验。

    一个报表打印控件源码(VB)

    标题中的“一个报表打印控件源码(VB)”指的是一个基于Visual Basic(VB)编程语言开发的用于报表打印功能的控件。这个控件可能是为了方便开发者在VB应用程序中实现复杂的报表设计和打印功能,例如从数据库提取数据、...

    一个简单可扩充的报表打印C++类库

    在IT行业中,报表打印是许多应用系统不可或缺的功能之一,特别是在数据管理和分析领域。本文将详细介绍一个基于C++的简单可扩展的报表打印类库,它主要用于处理文本和图像的打印需求。开发者可根据实际需要进一步...

Global site tag (gtag.js) - Google Analytics