JasperReports报表区段14

我们将在本章开始,一个简单的报表模板的结构看。依样画葫芦JasperReports的结构报表模板归类到多个区段。部分是有规定的高度,并且可以包含像直线,矩形,图像或文本字段对象报表的部分。

通过提供的报表数据源的虚拟记录的报表引擎遍历,在报表填充的时候。根据每个部分的定义的行为,引擎则呈现每个报表节在适当的时候。举例来说,细节部分的数据源中呈现为每个记录。当页中断,页眉和页面页脚节在需要时提供。

在JasperReports术语,报表区段也被称为报表带区。部分是由一个或多个频段。这些部分在报告生成时间反复填充并写在文件最后。

主要章节

在JasperReports报表模板主要有以下几个部分:

<title></title>
<pageheader></pageheader>
<columnheader></columnheader>
<groupheader></groupheader>
<detail></detail>
<groupfooter></groupfooter>
<columnfooter></columnfooter>
<pagefooter></pagefooter>
<lastpagefooter></lastpagefooter>
<summary></summary>
<nodata></nodata<>
<background></background>

下表总结了每个部分:

Section 描述
Title 本节中只出现一次在报表的开头。
Page Header 这部分出现在每一页的开头生成的文档中。
Column Header 这部分显示在生成的文档中的每一列的开头。如果报表只有一个定义列,那么列标题和脚注部分被忽略。
Group Header 这部分是由一个报告组(组章)引入。每次分组表达式改变其值,组页眉部分上面印的细节部分。在情况下,如果超过一个组被定义,组页眉打印在组定义的顺序。
Detail 这部分是重复的报表的数据源提供的数据的每一行。细节部分可以由多个频段。
Group Footer 这部分是由一个报告组(组章)引入。该组页脚节印下的分组表达式的值更改前的细节部分。组页脚始终打印在数据源的数据的最后一行。在情况下,如果超过一个组被定义,组页脚打印在组定义的顺序相反。
Column Footer 本节将出现在每一列的底部。如果报告的列数为1,则列标题和脚注部分被忽略。
Page Footer 本节出现在每个页面的底部。
Last Page Footer 这部分取代了报表的最后一页上的常规页页脚。在情况下,摘要部分也存在,那么这可能不是该文件的最后一页。这部分有时是有用的,当汇总信息具有在最后一页的底部显示。
Summary 本节中只出现一次在报告的末尾。
No Data 这部分被打印时,当无资料打印报表属性设置为无数据段。如果<noData>部在报告模板中定义,并且如果数据源是空的,那么<noData>部分将是唯一一个在填充时考虑,其含量将产生报表输出。
Background 背景部分会显示每一页上,并不能溢出到下一个页面。放在这一部分的元素在页面初始化的时候求值,并显示在背景中。所有其他的页面对象被显示在背景上对象的顶部。这部分是用于创建页面水印有用。

部分,元素和属性的关系

下图显示的元素和属性在报表中的部分关系。

section元素

所有上述报表部分都是可选的。但任何报表模板将至少有一个这样的部分。每一节都包含一个单一的<band>元素作为其唯一的子元素。一个<band>可以包含零个或多个下列子元素:

<line>, <rectangle>, <ellipse>, <image>, <staticText>, <textField>, <subReport>, or <elementGroup>

这些元素都必须包含一个<reportElement>作为其第一个元素(除了elementGroup)。一个<reportElement>决定了数据是如何奠定了该特定元素。与变量和参数,不要求报表内容有一个名字,因为通常不需要获得一个报表模板内的任何单个元素。

下表总结了<reportElement>属性:

属性 描述 有效值
x 指定频带元件的x坐标。 一个整数值,表示以像素为单位的元素的x坐标。此属性是必需的。
y 指定频带元件的y坐标。 一个整数值,表示在y以像素为元素的坐标。此属性是必需的。
width 指定频带元件的宽度。 一个整数值,表示该元素的宽度以像素为单位。此属性是必需的。
height 指定频带元件的高度。 一个整数值,表示以像素为元素的高度。此属性是必需的。
key 带元素的唯一标识符。 唯一字符串值。
stretchType 指定包含带延伸当元素如何延伸 NoStretch (default): 该元素不会延长。
RelativeToTallestObject: 该元素将伸展以适应它的组的最高的对象。
RelativeToBand: 该元素将延伸到适合带的高度。
positionType 指定当频带延伸元素的位置。 Float: 元素将取决于周围元件的尺寸移动。
FixRelativeToTop (default): 该元素将保持一个固定的位置相对于带的顶部。
FixRelativeToBottom: 该元素将保持一个固定的位置相对于带的底部。
isPrintRepeatedValues 如果指定的值重复打印。 true (default): 重复的值将被打印出来。
false: 重复的值将不被打印出来。
mode 指定元素的背景模式 不透明的,透明的
isRemoveLineWhenBlank 如果指定了当它是空白,并有在相同的水平空间没有其他元素的元素应被删除。 true, false
isPrintInFirstWholeBand 如果指定的元素必须打印在整个频段,也就是说,未被报表的页面或列之间分割的波段。 true, false
isPrintWhenDetailOverFlows 指定是否当频带溢出到新页或列中的元素将被打印出来。 true, false
printWhenGroupChanges 指定在指定的组改变元素将被打印。 string值
forecolor 指定元素的前景色。 无论前面加上#字符,或以下预定义值中的一个十六进制RGB值:black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, yellow, white.
backcolor 指定元素的背景颜色。 同样作为有效值的前景色

段属性

以下是报表的部分属性:

高度

该部分的高度指定高度,该特定部分的像素,是非常重要的在整体报表设计。

打印当表达式

布尔表达式,确定该部分是否应打印或不打印。

SPLIT ALLOWED

一个标志,指示该部分是否允许分裂时,它不适合在当前页面上。如果为true,该部分将被转移到下一个页面。注意,如果一节不适合下页上,那么将会考虑该标志的值的拆分。 splitType可以利用以下值:

  • splitType="Stretch" : 拆分拉伸内容。如果该部分在当前页上延伸(如果可用空间小于宣高度),这是添加到原始高度的区域是否允许分割到下页
  • splitType="Prevent" : 避免在第一次尝试分割。如果部分不适合在下一页中,分割通常发生,预防频带分割是有效的只有在第一次分割尝试。
  • splitType="Immediate" : 立即绘制。该频段允许的任何地方,除了分割高于其最顶端的元素。

例子

为演示开始每个部分让我们编写报表模板(jasper_report_template.jrxml)。将此文件保存到C:\tools\jasperreports-5.0.1\test目录。在这个文件中,我们将显示在每个部分的文本(上面所讨论的)。该文件的内容如下所述:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name="jasper_report_template" pageWidth="300" pageHeight="300" columnWidth="300"
leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" >

   <title>
      <band height="50">
         <textField>
            <reportElement x="100" y="16"
            width="100" height="20"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Title"]]>
            </textFieldExpression>
         </textField>
      </band>
   </title>
   <pageHeader>
      <band height="40">
         <textField>
            <reportElement  mode="Opaque" x="100" y="10"
            width="90" height="20"/>
            <textElement>
               <font isBold="true"/>
            </textElement>
            <textFieldExpression>
               <![CDATA["Page Header"]]>
            </textFieldExpression>
         </textField>
      </band>
   </pageHeader>
   <columnHeader>
      <band height="40">
            <textField>
            <reportElement  x="100" y="10" width="90"
            height="20"/>
            <textElement>
               <font isItalic="true"/>
            </textElement>
            <textFieldExpression>
               <![CDATA["Column Header"]]>
            </textFieldExpression>
         </textField>
      </band>
   </columnHeader>
   <detail>
      <band height="40">
         <textField>
            <reportElement mode="Opaque" x="100" y="10" width="90"
            height="20" backcolor="#99CCFF"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Report Details"]]>
            </textFieldExpression>
         </textField>
      </band>
   </detail>
   <columnFooter>
      <band height="40">
         <textField>
            <reportElement  x="100" y="10" width="90"
            height="20"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Column Footer"]]>
            </textFieldExpression>
         </textField>
      </band>
   </columnFooter>
   <pageFooter>
      <band height="40">
         <textField>
            <reportElement  x="100" y="10"
            width="90" height="20"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Page Footer"]]>
            </textFieldExpression>
         </textField>
      </band>
   </pageFooter>
   <lastPageFooter>
      <band height="40">
         <textField>
            <reportElement  x="100" y="10" width="90"
            height="20"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Last Page Footer"]]>
            </textFieldExpression>
            </textField>
      </band>
   </lastPageFooter>
   <summary>
      <band height="40">
         <textField>
            <reportElement  x="100" y="10" width="90"
            height="20"/>
            <textElement/>
            <textFieldExpression>
               <![CDATA["Summary"]]>
            </textFieldExpression>
         </textField>
      </band>
   </summary>
</jasperReport>

java代码填写并生成报告如下。保存这个文件JasperReportFill.java 到 C:\tools\jasperreports-5.0.1\test\src\com\yiibai 目录.

package com.yiibai;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;

public class JasperReportFill {
   public static void main(String[] args) {
      String sourceFileName =
            "C://tools/jasperreports-5.0.1/test/" +
            "jasper_report_template.jasper";

      try {
         JasperFillManager.fillReportToFile(sourceFileName, null,
            new JREmptyDataSource());
      } catch (JRException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }

   }
}

在这里,我们填充报表时,以模拟一个数据源,在这一个记录使用JREmptyDataSource的实例,但与所有在这个单一记录为null的字段。

报表生成

将编译和执行使用常规Ant构建过程上面的文件build.xml文件中的内容(根据目录保存:C:\tools\jasperreports-5.0.1\test)情况如下。(saved under directory C:\tools\jasperreports-5.0.1\test) 如下.

<?xml version="1.0" encoding="UTF-8"?>
<project name="JasperReportTest" default="viewFillReport" basedir=".">
   <import file="baseBuild.xml" />
   <target name="viewFillReport"
      depends="compile,compilereportdesing,run"
      description="Launches the report viewer to preview
      the report stored in the .JRprint file.">
      <java classname="net.sf.jasperreports.view.JasperViewer"
      fork="true">
         <arg value="-F${file.name}.JRprint" />
         <classpath refid="classpath" />
      </java>
   </target>
   <target name="compilereportdesing"
      description="Compiles the JXML file and
      produces the .jasper file.">
      <taskdef name="jrc"
      classname="net.sf.jasperreports.ant.JRAntCompileTask">
         <classpath refid="classpath" />
      </taskdef>
      <jrc destdir=".">
         <src>
         <fileset dir=".">
            <include name="*.jrxml" />
         </fileset>
         </src>
         <classpath refid="classpath" />
      </jrc>
   </target>
</project>

接下来,让我们打开命令行窗口并转到build.xml文件放置的目录。最后执行的命令 ant -Dmain-class=com.yiibai.JasperReportFill(viewFullReport是默认的目标),如下所示:

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.yiibai.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml

clean-sample:
   [delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
   [delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint

compile:
    [mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
    [javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
    warning: ‘includeantruntime‘ was not set, defau
    [javac] Compiling 1 source file to C:\tools\jasperreports-5.0.1\test\classes

compilereportdesing:
      [jrc] Compiling 1 report design files.
      [jrc] log4j:WARN No appenders could be found for logger
      (net.sf.jasperreports.engine.xml.JRXmlDigesterFac
      [jrc] log4j:WARN Please initialize the log4j system properly.
      [jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.htmll#noconfig for more info.
      [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
     [echo] Runnin class : com.yiibai.JasperReportFill
     [java] log4j:WARN No appenders could be found for logger
     (net.sf.jasperreports.extensions.ExtensionsEnviro
     [java] log4j:WARN Please initialize the log4j system properly.

viewFillReport:
     [java] log4j:WARN No appenders could be found for logger
     (net.sf.jasperreports.extensions.ExtensionsEnviro
     [java] log4j:WARN Please initialize the log4j system properly.

BUILD SUCCESSFUL
Total time: 18 minutes 22 seconds

正如上文编译的结果,JasperViewer窗口打开如下面的屏幕:

在这里,我们可以在每个文本被打印的部分看到。但应当注意的是,作为JRXML包含<lastPageFooter>元件,它将被显示在报表,而不是所显示的<pageFooter>元素的最后一页。如果有多个列的<columnHeader>和<columnFooter>元素将只显示在报告中。

时间: 2024-07-30 03:46:21

JasperReports报表区段14的相关文章

javaweb+jasperreports报表+struts2

本文将详细介绍javaweb中采用struts2框架的jasperreports报表开发方法,数据源选取的是connection.模板选取的是编译后的模板(jasper格式文件). 网上很多教程采用了jasperreports-3.x.x的api ,本文采用jarjasperreports-5.6.0.jar的api,两个版本的区别还是很大的,3.x.x版本的很多方法已经过时废弃了. 建议统一采用jarjasperreports-5.6.0.jar版本,因为生成报表的这些工具目前都有,jar包也

JasperReports报表变量13

报表变量是建立在报表表达式之上的特殊对象.报表变量简化以下任务: 报表,其中大量使用在整个报告模板表达式.这些表达式可以通过使用报表变量只能声明一次. 计数,求和,平均,最低,最高,方差等:报表变量可以基于像对应的表达式的值执行各种计算 如果变量是在报表设计定义,那么这些可以通过在表达式中的新变量引用.因此,在该变量是在报表设计中声明的顺序是非常重要的. 变量声明 变量声明如下: <variable name="CityNumber" class="java.lang.

JasperReports报表表达式12

报表表达式是JasperReports使我们能够显示在报表上的数据计算的强大功能.计算出数据不是一个静态数据,并且不受特别的报表参数或数据源字段传递的数据.报表表达式是由组合报表参数,字段和静态数据.默认情况下,Java语言是用于编写报表的表达式.其他脚本语言如Groovy脚本语言,JavaScript或BeanShell脚本,报表表达式是由JasperReports编译器支持. 本章将解释如何报表表达式工作假设他们一直只用Java语言编写的.在JRXML报表模板,那里有定义表达式几个元素,如下

JasperReports报表字段11

报表字段是代表数据源和报表模板之间的数据映射元素.字段可以在报告中的表达式进行组合,以获得所需的输出.报表模板可以包含零个或更多的<field>元素.当声明报表字段,数据源应提供相应的数据到所有在报告模板中定义的字段. 字段声明 字段声明做如下: <field name="FieldName" class="java.lang.String"/> name属性 <field>元素的name属性是强制性的.它通过名称引用的报表表达的

JasperReports报表组15

组在JasperReports的协助组织对报告的数据以逻辑方式.报告组代表连续记录的数据源中有一些共同点,比如某个报表字段的值的序列.报告组由<group>元素定义.一个报表可以有任意数量的组.一旦声明,群体可以在整个报告中提到的. 报告组有三个要素: Group expression: 这表示必须改变,以启动一个新的数据组中的数据. Group header section: 帮助位置标签在分组数据的开始. Group footer section: : 帮助位置标签在分组数据的末尾. 在截

JasperReports报表数据源10

数据源的结构数据容器.同时生成报告,Jasper报表引擎获得来自数据源的数据.数据可以从数据库,XML文件,对象数组和集合中的对象来获得.我们将在本章填充报告所看到的fillReportXXX()方法,预计将收到该报告的数据源其以填充,在net.sf.jasperreports.engine.JRDataSource对象或一个java.sql.Connection中的形式(当报表数据在关系数据库中找到). JRDataSource接口只有两个方法,这应该被实现: public boolean n

生成报表(转)

使用JasperReport+iReport进行WEB开发           一.JasperReport和iReport简介:  1.JasperReport简介 JasperReport是一个强大.灵活的报表生成工具,是开放源代码组织sf.net中的一个java 报表打印工程.能够展示丰富的页面内容,并将之转换成PDF,HTML,XML,Excel(通过POI或JExcelAPI实现)和Rtf(通过POI实现)格式.该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,We

jasperreport 追加新报表(2)

用ireport做好模版后,如果要新加一个打印页,如果是新手,直接修改模版应该是理想情况, 可是什么数据源 feild,parameter,var,subreport ,还有路径, 真的可以让一个人疯掉,(关键这些东西组织在一起跑不了,主要是要动态的出现这些新页,就是说要动态控制这些新页的数量以及要不要出现), 还好,想到如果直接用java在外部控制,就可以易如反掌了,毕竟java的东西自己熟, 幸运的看到一篇关于 ireport追加新页的文章 (是英文的,有时候不得不承认啊,谷歌是比度娘给力,

JasperReport报表开发(一)--原理介绍

1. JasperReport介绍 JasperReport 是一个开源的Java报表引擎,它不像其他的报表工具,例如Crystal报表是基于Java的,没有自己的表达式语法.Jasper Reports有提供丰富的内容到屏幕上,到打印机,或转换成PDF,HTML,XLS,RTF,ODT,CSV,TXT和XML文件的能力.Jasper Reports是一个Java类库,需要嵌入到Java应用程序中.Jasper Report的特点如下: 具有灵活的报表布局: 可以用文字或图形显示数据: 开发人员