レポートセクション

簡単なレポートテンプレートの構造については、「はじめに」の章で説明しました。同様の行で、JasperReportsはレポートテンプレートを複数のセクションに構造化します。セクションは、指定された高さを持つレポートの一部であり、線、長方形、画像、テキストフィールドなどのレポートオブジェクトを含めることができます。

レポートエンジンは、レポートの入力時に、提供されたレポートデータソースの仮想レコードを反復処理します。次に、各セクションの定義された動作に応じて、エンジンは必要に応じて各レポートセクションをレンダリングします。たとえば、詳細セクションは、データソースのレコードごとにレンダリングされます。改ページが発生すると、必要に応じてページヘッダーセクションとページフッターセクションがレンダリングされます。

JasperReportsでは、用語とレポートセクションは次のようにも呼ばれます。 report bands。セクションは、1つ以上のバンドで構成されます。これらのセクションは、レポート生成時に繰り返し入力され、最終的なドキュメントを準備します。

主なセクション

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>

次の表は、各セクションをまとめたものです。

S.NO セクションと説明
1

Title

このセクションは、レポートの最初に1回だけ表示されます。

2

Page Header

このセクションは、生成されたドキュメントの各ページの先頭に表示されます。

3

Column Header

このセクションは、生成されたドキュメントの各列の先頭に表示されます。レポートに定義されている列が1つしかない場合、列のヘッダーセクションとフッターセクションは無視されます。

4

Group Header

このセクションは、レポートグループ(グループの章)によって紹介されています。グループ化式の値が変更されるたびに、グループヘッダーセクションが詳細セクションの上に出力されます。複数のグループが定義されている場合、グループヘッダーはグループ定義の順序で出力されます。

5

Detail

このセクションは、レポートのデータソースによって提供されるデータの各行に対して繰り返されます。詳細セクションは、複数のバンドで構成できます。

6

Group Footer

このセクションは、レポートグループ(グループの章)によって紹介されています。グループ化式の値が変更される前に、グループフッターセクションが詳細セクションの下に印刷されます。グループフッターは、データソースのデータの最後の行に対して常に印刷されます。複数のグループが定義されている場合、グループフッターはグループ定義の逆の順序で印刷されます。

7

Column Footer

このセクションは、各列の下部に表示されます。レポートの列数が1の場合、列のヘッダーセクションとフッターセクションは無視されます。

8

Page Footer

このセクションは、各ページの下部に表示されます。

9

Last Page Footer

このセクションは、レポートの最後のページの通常のページフッターを置き換えます。要約セクションも存在する場合、これはドキュメントの最後のページではない可能性があります。このセクションは、最後のページの下部に要約情報を表示する必要がある場合に役立つことがあります。

10

Summary

このセクションは、レポートの最後に1回だけ表示されます。

11

No Data

このセクションは、[データなしの印刷]レポートプロパティが[データなし]セクションに設定されている場合に印刷されます。<noData>セクションがレポートテンプレートで定義されていて、データソースが空の場合、入力時に<noData>セクションのみが考慮され、そのコンテンツによってレポート出力が生成されます。

12

Background

背景セクションはすべてのページに表示され、次のページにオーバーフローすることはできません。このセクションに配置された要素は、ページの初期化時に評価され、バックグラウンドで表示されます。他のすべてのページオブジェクトは、背景オブジェクトの上に表示されます。このセクションは、ページの透かしを作成するのに役立ちます。

セクション、要素、および属性の関係

次の図は、レポートのセクションの要素と属性の関係を示しています。

セクション要素

上記のレポートセクションはすべてオプションです。ただし、レポートテンプレートには、少なくとも1つのそのようなセクションがあります。これらの各セクションには、単一の<band>唯一のサブ要素としての要素。A <band>次のサブ要素を0個以上含めることができます-

<line>、<rectangle>、<ellipse>、<image>、<staticText>、<textField>、<subReport>、または<elementGroup>

これらの各要素には、単一の<が含まれている必要がありますreportElement>最初の要素として(elementGroupを除く)。A <reportElement>その特定の要素のデータがどのように配置されるかを決定します。変数やパラメータとは異なり、通常はレポートテンプレート内の個々の要素を取得する必要がないため、レポート要素に名前を付ける必要はありません。

次の表は、<の属性をまとめたものです。reportElement> −

属性 説明 有効な値
バツ バンド要素のx座標を指定します。 要素のx座標をピクセル単位で示す整数値。この属性は必須です。
y バンド要素のy座標を指定します。 要素のy座標をピクセル単位で示す整数値。この属性は必須です。
バンド要素の幅を指定します。 要素の幅をピクセル単位で示す整数値。この属性は必須です。
高さ バンド要素の高さを指定します。 要素の高さをピクセル単位で示す整数値。この属性は必須です。
キー バンド要素の一意の識別子。 一意の文字列値。
StretchType 含まれているバンドが伸びるときに要素がどのように伸びるかを指定します

NoStretch (default) −要素は伸びません。

RelativeToTallestObject −要素は、そのグループ内で最も高いオブジェクトに対応するように伸びます。

RelativeToBand −要素はバンドの高さに合うように伸びます。

positionType バンドが伸びるときの要素の位置を指定します。

Float −周囲の要素のサイズに応じて要素が移動します。

FixRelativeToTop (default) −エレメントは、バンドの上部に対して固定位置を維持します。

FixRelativeToBottom −エレメントは、バンドの底に対して固定位置を維持します。

isPrintRepeatedValues 繰り返される値を出力するかどうかを指定します。

true (default) −繰り返される値が出力されます。

false −繰り返し値は出力されません。

モード 要素のバックグラウンドモードを指定します 不透明、透明
isRemoveLineWhenBlank 要素が空白で、同じ水平スペースに他の要素がない場合に要素を削除するかどうかを指定します。 真/偽
isPrintInFirstWholeBand 要素をバンド全体、つまりレポートページまたは列に分割されていないバンドで印刷する必要があるかどうかを指定します。 真/偽
isPrintWhenDetailOverFlows バンドが新しいページまたは列にオーバーフローしたときに要素を印刷するかどうかを指定します。 真/偽
printWhenGroupChanges 指定したグループが変更されたときに要素が印刷されることを指定します。 文字列値。
フォアカラー 要素の前景色を指定します。 #文字が前に付いた16進数のRGB値、または次の事前定義された値のいずれか:黒、青、シアン、darkGray、灰色、緑、lightGray、マゼンタ、オレンジ、ピンク、赤、黄、白。
背景色 要素の背景色を指定します。 フォアカラーの有効な値と同じ

セクション属性

レポートセクションの属性は次のとおりです-

高さ

セクションの高さは、その特定のセクションの高さをピクセル単位で指定し、レポートデザイン全体で非常に重要です。

式のときに印刷

セクションを印刷するかどうかを決定するブール式。

分割許可

現在のページに収まらない場合にセクションを分割できるかどうかを示すフラグ。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 \ tutorialspointディレクトリに移動します。

package com.tutorialspoint;

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のインスタンスを使用して、1つのレコードを含むデータソースをシミュレートしますが、この1つのレコードのすべてのフィールドはnullです。

レポートの生成

通常のANTビルドプロセスを使用して、上記のファイルをコンパイルして実行します。ファイルbuild.xml(ディレクトリC:\ tools \ jasperreports-5.0.1 \ testの下に保存)の内容は次のとおりです。

インポートファイル--baseBuild.xmlは、Environment Setupの章から取得され、build.xmlと同じディレクトリに配置する必要があります。

<?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.tutorialspoint.JasperReportFill (viewFullReportがデフォルトのターゲットです)次のように-

C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.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.html#noconfig for more info.
   [jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.

run:
   [echo] Runnin class : com.tutorialspoint.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>要素は、レポートに複数の列がある場合にのみ表示されます。