jasperreport类库介绍2

Report Query
为了填充报表,我们要给reporting engine提供报表数据,或者至少告诉他该怎么取得我们要的数据。通常是要接收到一个dori.jasper.engine.JRDataSource类型的对象,但是也支持JDBC的SQL查询。
<queryString>,这个字段出现在报表参数之后,report fields之前。
XML Syntax
 

   <!ELEMENT queryString (#PCDATA)>
例如:<queryString><![CDATA[SELECT * FROM Orders]]></queryString>
一个很重要的方面是报表参数在这里的应用,例如:
第一种方式是参数像普通的java.sql.PreparedStatement一样使用,规范是:
<queryString>
  <!CDATA[
    SELECT * FROM Orders WHERE OrderID <= $P{MaxOrderID} ORDER BY ShipCountry
  ]]>
</queryString>
第二种方式是将一条查询语句作为一个参数传递过来,例如:
<queryString>
  <!CDATA[
    SELECT * FROM $P!{MyTable} ORDER BY $P!{OrderByClause}
  ]]>
</queryString>
这样就要求再交给java.sql.PreparedStatemen之前,将参数解析出来。<queryString>$P!{MySQLQuery}</queryString>
jasper, subreport, scriptlet, and webapp use internal SQL有例子


Fields
XML Syntax
  <!ELEMENT field (fieldDescription?)>
    <!ATTLIST field
      name NMTOKEN #REQUIRED
      class (java.lang.Object | java.lang.Boolean | java.lang.Byte |
      java.util.Date | java.sql.Timestamp | java.lang.Double | java.lang.Float |
      java.lang.Integer | java.io.InputStream | java.lang.Long | java.lang.Short |
      java.math.BigDecimal | java.lang.String) "java.lang.String"
    >
  <!ELEMENT fieldDescription (#PCDATA)>
例如:
  ColumnName DataType Length
  EmployeeID int 4
  LastName varchar 50
  FirstName varchar 50
  HireDate datetime 8
相应应该声明的report fields 如下:
  <field name="EmployeeID" class="java.lang.Integer"/>
  <field name="LastName" class="java.lang.String"/>
  <field name="FirstName" class="java.lang.String"/>
  <field name="HireDate" class="java.util.Date"/>
Field Class包含的类型有:java.lang.Object java.lang.Boolean java.lang.Byte java.util.Date java.sql.Timestamp
  java.lang.Double java.lang.Float java.lang.Integer java.io.InputStream java.lang.Long java.lang.Short java.math.BigDecimal
这里有一个java.lang.Object类型,当数据源是custom made data sources时,要用这种类型。
有一个附加的属性<fieldDesciption>,这个有时会很有用处,你可以在里面存储key等任何需要的信息,以便在runtime从custom data source取得值,例如:
 <field name="PersonName" class="java.lang.String" isForPrompting="true">
   <fieldDesciption>PERSON NAME</fieldDesciption>
 </field>

Variables
是在report expression建立的一种特殊的对象,可以用来简化报表设计,比如只声明一此次频繁使用的expression,或者在相应expression的上实现个各种各样的计算。
XML Syntax
  <!ELEMENT variable (variableExpression?, initialValueExpression?)>
    <!ATTLIST variable
      name NMTOKEN #REQUIRED
      class NMTOKEN "java.lang.String"
      resetType (None | Report | Page | Column | Group) "Report"
      resetGroup CDATA #IMPLIED
      calculation (Nothing | Count | Sum | Average | Lowest | Highest |
      StandardDeviation | Variance | System) "Nothing"
    >
  <!ELEMENT variableExpression (#PCDATA)>
  <!ELEMENT initialValueexpression_r(#PCDATA)>
变量声明的位置很重要,后声明的可以引用先声明的。

Variable Name
Variable Class
Reset Type,来指示在报表填充进程中,这个变量的重新加载特性,有五个级别:
There are 5 reset types for a variable:
   No Reset: The variable will never be initialized using its initial value expression and will only
  contain values obtain by evaluating the variable''''s expression_r(resetType="None").
   Report Level Reset: The variable is initialized only once, at the beginning of the report filling
  process, with the value returned by the variable''''s initial value expression
  (resetType="Report").
   Page Level Reset: The variable is reinitialized at the beginning of each new page
  (resetType="Page").
   Column Level Reset: The variable is reinitialized at the beginning of each new column
  (resetType="Column").
   Group Level Reset: The variable is reinitialized every time the group specified by the resetGroup
  attributes breaks (resetType="Group").
默认的是 resetType="Report".
Reset Group


Calculations
变量可以按着它们相应的表达式的值来实现内建式的计算,类型有:
Calculation Nothing,表示数据源的每次迭代变量都要进行重新加载,只是简单的根据变量的表达式得到值。
Calculation Count,
Calculation Sum
Calculation Average
Calculation Lowest and Highest
Calculation StandardDeviation and Variance
Calculation System
“TODO:具体的各个的含义还要再细看 P36”
例子:这个例子中的每页汇总
<variable name="QuantitySum" class="java.lang.Double" resetType="Page"
calculation="Sum">
  <variableExpression>$F{Quantity}</variableExpression>
  <initialValueExpression>new Double(0)</initialValueExpression>
</variable>


Built-in Report Variables
一些系统内建的变量,
Variable PAGE_NUMBER,用它可以得到当前的页号,在完成是还可以得到总的页号(利用evaluationTime)。
Variable COLUMN_NUMBER,
Variable REPORT_COUNT,记录的总数
Variable PAGE_COUNT,当页的记录总数
Variable COLUMN_COUNT,当前列的记录总数
Variable COLUMN_COUNT,当声明了一个组的时候,则会自动的声明一个,用来计算当前组的记录数

==Report Sections
建立一个report design的时候,我们需要定义内容和格式,格式的限定是由下面的定义的<title>, <pageHeader>,<columnHeader>, <groupHeader>,
<detail>, <groupFooter>, <columnFoter>,<pageFooter>, <summary>,当定义格式时,用<band>。
XML Syntax
  <!ELEMENT band (printWhenExpression?, (line | rectangle | image | staticText
  | textField | subreport | elementGroup)*)>
    <!ATTLIST band
    height NMTOKEN "0"
    >
  <!ELEMENT printWhenexpression_r(#PCDATA)>
Band Height,制定这个band 的高度,如果发现对象超过这个高度,则编译时会有报警信息。

Skipping Bands,“TODO:不清楚”


Main Report Sections
XML Syntax
  <!ELEMENT title (band?)>
  <!ELEMENT pageHeader (band?)>
  <!ELEMENT columnHeader (band?)>
  <!ELEMENT detail (band?)>
  <!ELEMENT columnFooter (band?)>
  <!ELEMENT pageFooter (band?)>
  <!ELEMENT summary (band?)>
Title,要在page header section之前加载,要是想page header section在title section 之前被加载出来,则需要在title section开始之前,
将page header section 中的elements也都拷贝过来,这样他们就可以利用<printWhenExpression>在第一页上suppress真正的page header section,
当然这要有PAGE_NUMBER的支持。
  Page Header
  This section appears at the top of each page in the generated document.
  Column Header
  This section appears at the top of each column in the generated document.
  Detail
  For each record in the data source, the engine will try to generate this section.
  Column Footer
  This section appears at the bottom of each column in the generated document. It never stretches
  downward to acquire the content of its containing text fields and will always remain of declared fixed
  height.
  Page Footer
  This section appears at the bottom of each page in the generated document. Just like the column footer
  section above, the page footer never stretches downwards to acquire the content of its containing text
  fields and will always remain of declared fixed height.
  Summary
  This section is generated only once per report and appears at the end of the generated document, but is
  not necessarily the last section being generated.
  That''''s because in some cases, the column footer or/and page footer of the last page can follow it.
  As mentioned in the 4.3 Report Properties paragraph, the summary section can start a new page of its
  own, by setting the isSummaryNewPage attribute to "true". Even if this attribute remains false, the
  summary section always starts a new page if it does not fit on the remaining space of the last page or if
  the report has more than one column and on the last page it has already started a second column.
  If the main report sections that we have seen here are not sufficient for what you need, maybe you
  should consider introducing supplementary sections like group headers and group footers.
  We are now going to see how to group data on the report.

Data Grouping

group report 有三个组件:
group expression;
group header section;
group footer section.
当group expression的值在报表填充时,随着数据库的迭代而变化时,将会有一个group rupture产生,相应的<groupFooter> and <groupHeader>会变化。
值得注意的是,所有用来group的应该是已经经过排序的数据,因为jasperReport 并不进行排序。

XML Syntax
  <!ELEMENT group (groupExpression?, groupHeader?, groupFooter?)>
    <!ATTLIST group
      name NMTOKEN #REQUIRED
      isStartNewColumn (true | false) "false"
      isStartNewPage (true | false) "false"
      isResetPageNumber (true | false) "false"
      isReprintHeaderOnEachPage (true | false) "false"
      minHeightToStartNewPage NMTOKEN "0"
    >
  <!ELEMENT groupExpression (#PCDATA)>
  <!ELEMENT groupHeader (band?)>
  <!ELEMENT groupFooter (band?)>

转载于:https://my.oschina.net/crazybird/blog/38107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值